js向对象中添加属性 js往对象里添加属性
js创建数组对象的过程有几种?特点是什么?
}js编程中创建对象的几种方式,如原始方法、工厂方法等创建对象。
js向对象中添加属性 js往对象里添加属性
js向对象中添加属性 js往对象里添加属性
js向对象中添加属性 js往对象里添加属性
1、原始方法
var obj = new Object();
obj.name = "Koji"; //为对象添加属性
obj.age = 21;
obj.showName = function(){ //为对象添加方法
}obj.showAge = function(){
alert(this.age);
}obj.showName(); //Koji
obj.showAge(); //21
上面的方式通过new关键字生成一个对象,然后根据JS是动态语言的特性添加属性和方法,构造一个对象。其中的this是表示调用该方法的对象。
这种方式的问题是如果需要多次创建对象,则需要重复代码多次,不利于代码的复用。
2、工厂方法 :
function createObj(){
var obj = new Object(); //创建对象
obj.age = 21;
obj.showName = function(){
}obj.showAge = function(){
alert(this.age);
}return obj; //返回对象
}var obj1 = createObj();
var obj2 = createObj();
obj1.showName(); //Koji
obj2.showAge(); //21
这种方式提高了代码重用率,还可以改变工厂方法,传入参数赋值。
function createObj(name, age){ //构造对象时可以传入初始化参数
var obj = new Object(); //创建对象
obj.name = name;
obj.age = age;
obj.showName = function(){
}obj.showAge = function(){
alert(this.age);
}return obj; //返回对象
}var obj1 = createObj("Koji", 22);
var obj2 = createObj("Luo", 21);
obj1.showName(); //Koji
obj1.showAge(); //22
obj2.showName(); //Luo
obj2.showAge(); //21
上面的方式虽然可以提高代码的复用率,但和面向对象中类的概念相比有一个很大的缺陷。面向对象强调对象的属性私有,而对象的方法是共享的。而上面的工厂方法创建对象的时候要为每个对象创建各自私有的方法。同时由于为每个对象都创建逻辑相同的方法,浪费内存。
改进如下:
function createObj(name, age){
var obj = new Object(); //创建对象
obj.name = name;
obj.age = age;
obj.showName = showName;
obj.showAge = showAge;
return obj; //返回对象
}function showName(){ //函数也是一个对象
}function showAge(){
alert(this.age);
}var obj1 = createObj("Koji", 22);
var obj2 = createObj("Luo", 21);
obj1.showName(); //Koji
obj1.showAge(); //22
obj2.showName(); //Luo
obj2.showAge(); //21
上面通过定义连个函数对象,解决了不同对象持有函数对象的私有问题。现在所有对象的方法都持有上面两个函数的引用。但这么一来的话,对象的函数又和对象成了相互,不相干的了。这和面向对象定方法属于特定类的思想不符合。
3、构造函数方式
function Person(name, age){
//当调用new Person的时候,在执行行代码前,先生成一个Person对象,并将对象在内存中的
//索引赋值给this关键字,此时可以通过this关键字作新生成的对象,如下面的添加属性或方法
this.name = name; //this关键字不能少。为当前对象,即this关键字引用的对象的name属性赋值
//,实际相当于为当前对象添加name属性后,再为其name属性赋值。
this.showName = function(){ //为当前对象添加方法
}this.showAge = function(){
alert(this.age);
}//将当前对象返回给赋值符号左边的变量(不必明确使用return)
}var obj1 = new Person("Koji", 22); //生成一个Person对象
obj1.showName(); //Koji
obj1.showAge(); //22
obj2.showName(); //Luo
obj2.showAge(); //21
构造函数的方式和工厂方式一样,会为每个对象创建独享的函数对象。当然也可以将这些函数
对象定义在构造函数外面,这样又有了对象和方法相互的问题。
原型方法:
该方法利用的对象的prototype属性
//将所有的属性的方法都赋予prototype属性
Person.prototype.name = "Koji"; //添加属性
Person.prototype.常用的创建方式是种,即采用“键/值对”的形式。在这种形式下,一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号),“age = 22;
Person.prototype.showName = function(){ //添加方法
}Person.prototype.showAge = function(){
alert(this.age);
}var obj1 = new Person(); //生{dc1.value = i;成一个Person对象
var obj2 = new Person();
obj1.showName(); //Koji
obj1.showAge(); //22
obj2.showName(); //Koji
obj2.showAge(); //22
当生成Person对象的时候prototype的属性都赋值给了新的对象。那么属性和方法是共享的。
该方法的问题首先是构造函数不能传参,每个新生成的对象都有默认值。其次,方法共享没有任何问题,但是属性共享就有问题,当属性是可改变状态的对象的时候。
例子:
Person.prototype.age = 22;
Person.prototype.array = new Array("Koji", "Luo");
Person.prototype.showAge = function(){
alert(this.age);
alert(this.array);
}var obj1 = new Person(); //生成一个Person对象
var obj2 = new Person();
obj1.array.push("Kyo"); //向obj1的array属性添加一个元素
obj1.showArray(); //Koji,Luo,Kyo
obj2.showArray(); //Koji,Luo,Kyo
以上代码通过obj1向obj1的属性array添加元素的时候,obj2的arra属性的元素也跟着受到影响,原因就在于obj1和obj2对象的array属性引用的是同一个Array对象,那么改变这个Array 对象,另一引用该Array对象的属性自然也会受到影响混合的构造函数/原型方式。
使用构造函数定义对象的属性,使用原型(prototype)定义对象的方法,这样就可以做到属性私有,而方法共享。
例子:
function Person(name, age) {
this.name = name;
this.array = new Array("Koji", "Luo");
}Person.prototype.showName = function() {
alert(this.array);
}var obj1 = new Person("Koji", 22); //生成一个Person对象
obj1.array.push("Kyo"); //向obj1的array属性添加一个元素
obj1.showArray(); //Koji,Luo,Kyo
obj1.showName(); //Koji
obj2.showArray(); //Koji,Luo
obj2.showName(); //Luo
属性私有后,改变各自的属性不会影响别的对象。同时,方法也是由各个对象共享。在语义上,
这符合了面相对象编程的要求。
4、动态原型方法
function Person(name, age) {
this.name = name;
this.array = new Array("Koji", "Luo");
//如果Person对象中的_initialized为undefined,表明还没有为Person的原型添加方法
if (typeof Person._initialized == "undefined")
{Person.prototype.showName = function() {
alert(this.array);
}Person._initialized = true; //设置为true,不必再为prototype添加方法
}}
var obj1 = new Person("Koji", 22); //生成一个Person对象
obj1.array.push("Kyo"); //向obj1的array属性添加一个元素
obj1.showArray(); //Koji,Luo,Kyo
obj1.showName(); //Koji
obj2.showArray(); //Koji,Luo
obj2.showName(); //Luo
这种方法和构造函数/原型方式大同小异。只是将方法的添加放到了构造函数之中,同时在构造函数Person上添加了一个属性用来保证if语句只能成功执行一次。
在实际应用中采用最广泛的是构造函数/原型方法。动态原型方法也很流行,它在功能上和构造函数/原型方法是等价的,不要单独使用构造函数或原型方法。
js中如何获取某一个属性的值,如何设置一个属性的值
}Person.prototype.showArray = function(){1.需要获取element元素,有很多种方法getElementById("")(只能获取单一dom元素)想要获取元素请使用getElementsByName("")
var obj = {a:1,b:2,c:3}步:需要获取element元素,有很多种方法getElementById("")(只能获取单一dom元素)想要获取元素请使用getElementsByName("") 第二步:设置属性-element.setAttribute("属性名称","属性值");获取属性-element.getAttribute("属性名称")var dc1 ={;
.getAttribute("属性名")//获取
.setAttribute("属性名","值")//设置
jascript如何拼接对象属性到?
var obj2 = new Person("Luo", 21);function goToPage(path, obj){
Function 对象的 length 属性var i, ='';
}不知道具体细节写没写错。大概就是在JS里给方法加上参数,然后页面调用方法的时候,把参数获取到,放在方法里。for(i in obj) +='&'+i+'='+obj[i];
window.location.href=path + .replace(/./, '?');
}//大致就是这些了,有问题继续追问吧,祝你好运!
function goToPage(path, id){
window.location.href=path + '?id=' + id;
window.location.href='/page.php?id='+123+'&name='+abc
JS ES6中Class如何实现将属性或者方法放在prototype里面?
console.log(name + ':' [value, key] = [key, value]; // 交换属性名和属性值+ o[name]);function test()
var dc1 = {{}
test.prototype.name = '张三';
test.prototype.sayName = function(){
console.log(this.name);//张三
暂时好像不支持放class里面,
只能 ClassName.prototype.prop = xxx;
怎么用js拿到一个对象里面的属性
Girl.prototype.stanbeforeBeginding;使用for...in可以遍历js对象的属性,用法如下:
for...in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环作)。
for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次作。
12
34
for (变量 in 对象)
{//在此执行代码
例:document.body.insertAdjacentHTML(beforeEnd,"")示例:
12
3for (var sProp in window) {
alert(sProp);
}以上例子会弹出window对象中的所有属性
如何用js在页面中添加元素?
}“变量”用来指定变量,指定的变量可以是数组元素,也可以是对象的属性。object.insertAdjacentHTML(sWhere, sText)
5、点击按钮,实现元素添加:在指定位置的元素中插入给定的 HTML 文本。
afterBegin
beforeEnd
afterEnd
扩展资料:添加元素中用到的c语言
1、append():前面jascript使用注意事项:是入的对象,面增加子元素,父子级关系。
2、appendto():后面是入对象,面增加子元素,父子级关系。
4、prependTo():后面是插入对象,最前面增加子元素,父子级关系。
5、before():前面是插入对象,之前增加元素,同级关系。
7、insertbefore():后面是插入对象,之前加入元素,同级关系。
8、insertafter():后面是插入对象,之后加入元素,同级关系。
使用HTML DOM appendChild() 方法实现元素的添加。
函数解析及实例实现过程如下:
1、定义和用法:
appendChild() 方法可向的子列表的末尾添加新的子。如果文档树中已经存在了 newchild,它将从文档树中删除,然后重新插入它的新位置。
如果 newchild 是 DocumentFragment ,则不会直接插入它,而是把它的子按序插入当前的 childNodes[] 数组的末尾。
可以使用 appendChild() 方法移除元素到另外一个元素。
2、创建一个简单的的html代码,如下:
3、设计一个函数,通过此函数可以在目标元素内添加新的标签元素。
4、此时的页面展示如下:
想要在页面动态添加元素,首先要确定在哪个元素后面添加元素,然后利用js的appendChild方法在该元素后面追加元素。
1.获取父元素var body = document.getElementsByTagName('body')[0]。
2.然后动态创建a标签var a = document.createElement('a')。
3.把创建好的a标签追加到body下面body.appendChild(a)。
4.在a标签里面添加文本内容a.innerHTML = '这是一个链接'。
5.给a标签添加一个链接a.href = '
扩展资料:
js一些原生方法
element.appendChild()方法向添加一个子。
element.innerHTML设置或返回元素的内容。
document.getElementsByTagName()返回带有指定标签名的对象。
document.getElementById()返回对拥有指定 id 的个对象的引用。
document.createElement()通过指定名称创建一个元素。
js代码中有个data要放入已经封装好的js对象grid(dojo对象类似aspx中的DataList、gridView),想让显示的表格单元中的某一列变成链接,从网络中查到如下方法,但是这里就算创建出网页元素a,但是他还是要appendChild到某一个已有的网页元素中,这里没有这样的网页元素,
1.创建链接
1
2 var o = document.body;
3 //创建链接
4 function createA(,text)
5 {
6 var a = document.createElement("a");
7 a.href = ;
8 a.innerHTML = text;
9 a.style.color = "red";
10 o.appendChild(a);
11 }
12 createA("");
13
扩展资料添加元素中用到的c语言:
while(scanf("%d",&n)!=EOF&&n==0) //表示你一直可以输入 整型 的数字 知道你输入 数字为0结束
都是0 结束。while(scanf("%d %d",&n,&m)!=EOF&&n==0&&m==0) //表示你一直可以输入 整型 的数字 直到m和n中有一个数字 或者都为 0 结束。
参考资料:
docuemtn.getElementById("d").getElementByTagName("a")[0].setAttribute("class","class名称");
js添加的元素和页面中原有的元素,对于jquery来说是一样的。
比如:documnet.getElementById("id").innerHtml='
;上面代码向id为id的元素中添加了一个div元素。
对于jquery来说可以正常获取:$("#d")。
扩展资料:
简化代码
例如:创建对象
之前是这样的:
Var car = new object();
Car.color = “red”;
Car.wheels = 4;
Car.age = 8;
而现在可以写成这样子:
Var car = {color:'red', wheels:4, age:8}
例如:创建数组
之前是这样的:
Var studentArray = new Array(‘zhangsan', 'lisi', ‘zhaowu', ‘wuliu');
而现在可以写成这样子:
Var studentArray = {‘zhangsan', ‘ lisi', ‘zhaowu', ‘wuliu'};
尽量使用JaScript原生函数
例如:获取一组数据中的值
var maxData = Math.max(0,20,50,10);
alert(maxData); //返回的值为50
代码可配置
你写的代码如果想让别人更容易进行使用或者修改,则需要可配置,解决方案是在你写的脚本中增加一个配置对象。要点如下:
1、在你的脚本中新增一个叫configuration的对象。
2、在配置对象中存放所有其它人可能想要去改变的东西,例如CSS的ID、class名称、语言等等。
3、返回这个对象,作为公共属性以便其它人可以进行重写。
代码兼容性
兼容性是初学者容易忽略的部分,通常学习Jascript的时候都是在某个固定的浏览器中进行测试,而这个浏览器很有可能就是IE,这是非常致命的,因为目前几大主流浏览器中偏偏IE对标准的支持是最的。
最终用户看到的结果也许就是,你写的代码在某个浏览器无确运行。你应该把你的代码在主流的浏览器中都测试一下,这也许很费时间,但是应该这样做。
参考资料来源:
方法1
object.insertAdjacentHTML(sWhere, sText)
在指定位置的元素中插入给定的 HTML 文本。
afterBegin
beforeEnd
afterEnd
方法2
object.appendChild(oNode)
给对象追加一个子元素。
例:
var newObj=document.createElement("");
newObj.innerText="内容";
document.body.appendChild(newObj);
var mask = document.createElement("div");//js新建元素
js 对象中为什么不能直接调用自己的属性方法?
(ii)JSON通过字符串形式来表达JaScript的对象。如:简单点,对象中的getName方法返回的name是一个变量值,你在函数中没有定义变量name或者没有传一个参数来给name赋值,此时的name变量就只能是undefinvar user = {ed,而对象obj中的name是一个对象的属性不是一个变量,当你调用getName方法时,调用对象是obj,方法中的this.name中的this就是指向了这个obj,此时的this.name就是obj的属性name。
this.waist;js对象中插入字符串
代码我就是顺手学的,没有测试过,可能有错误。v如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。ar str = "abcdac";
var obj = {};
for(var i=0;i
console.log(str[i]);
//改为如下即可,你需要先设置obj的str属性、然后才可以对他进行赋值
obj.str_o.test();//输出“defined by this”=str;
obj.str[i] = 1;
}console.log(obj);
JS中关于改变对象属性值循环PUSH的问题
2.设置属性-element.setAttribute("属性名称","属性值");获取属性-element.getAttribute("属性名称")。var dc = [];
//定义一个构造函数,用来生成对应的对象,可以类比Ja中的构造函数type: "car",
value: 4,
clone: function () { return { type: this.type, value: this.value } }
};
for (var i = 0; i < 5; i++)
dc.push(dc1.clone());
}for (var i = 0; i日常用途 < 5; i++)
{alert(dc[i].value);
var dc=[];
type :"car",
value:4,
};
for(var i =0;i<5;i++){
dc1.value=i;
dc.push({
"type":dc1["type"],
"value":dc1["value"]
});
}传址 和传值的问题
js面向对象的几种方式
代码代码示例:JaScript中对象的创建有以下几种方式:
(1)使用内置对象
(2)使用JSON符号
(3)自定义对象构造
一、使用内置对象
JaScript可用的内置对象可分为两种:
1,JaScript语言原生对象(语言级对象),如String、Object、Function等;
2,JaScript运行期的宿主对象(环境宿主级对象),如window、document、body等。
我们所说的使用内置对象,是指通过JaScript语言原生对象的构造方法,实例化出一个新的对象。如:
var str = new String("实例初始化String");
var str1 = "直接赋值的String";
var func = new Function("x","alert(x)");//示例初始化func
var o = new Object();//示例初始化一个Object
(i)何谓JSON ?
JSON (JaScript Object
Notation)即JaScript对象命名,是一种轻量级的数据交换格式,易于阅读和编写,同时也易于及其解析和生成。它基于
December 1999》的一个子集。JSON是完全于语言的文本格式,因此成为数据交换的理想格式。
JSON作为
JaScript的一个自己,同时ActionScript、C、C#、ColdFusion、E、Ja、JaScript、ML、
ObjectiveCAML、Perl、PHP、Python、Rebol、Ruby、Lua等一系列的语言都提供支持,使得JSON成为Ajax开发的
方案。
JSON有两种构建方式,一种是采用简单的“键/值对”的,在不同的语言中被理解为对象、记录、结构、字典、哈希表、有键列表,或者关联数组等,另一种采用有序的值列表,大部分语言把它理解为数组。
‘键/值' 对”之间使用“,”(逗号)分隔。
JSON具有以下特点:(1)简单格式化的数据交换;(2)易于人们的读写习惯;(3)易于机器的分析和运行。
在JaScript中,JSON被理解为对象。通过字符串形式的JSON,数据可以很方便地解析成JaScript独享,并进行数据的读取传递。通过JSON,在一定程度上了JaScript对象无法作为参数系列化传递的问题。
1,简单的JSON
{name:"刘德华",age:"25",:"男"}
2,JSON值的类型
JSON的值可以是简单的数据类型,例如数字、浮点、字符等,也可以是数组及对象。例如以数组作为member键值的JSON:
{member:[{name:"刘德华"},{name:"郭富城"},{name:"张学友"},{name:"黎明"}]}
{book:[{name:"三国演义"},{name:"西游记"},{name:"水浒传"},{name:"红楼梦"}],
author:[{name:"罗贯中"},{name:"吴承恩"},{name:"施耐安",{name:"曹雪芹"}}]
}3,在JaScript中使用JSON
JSON是JaScript原生格式,这意味着在JaScript中处理JSON数据不需要任何特殊的API或者工具包,JaScript默认将JSON当做一个对象处理。
将对象传递给一个变量,例如:
var somebooks = {
book:[{name:"三国演义"},{name:"西游记"},{name:"水浒传"},{name:"红楼梦"}],
author:[{name:"罗贯中"},{name:"吴承恩"},{name:"施耐安",{name:"曹雪芹"}}]
}JSON的每个“键”相当于对象的属性,例如访问book中的个条目,在JaScript中,就可以简单地使用“somebooks.book[0].name”来获取“三国演义”这个值。
我们不但可以将一个JSON字符串转化为对象,反过来将一个对象“编译”为一个JSON字符串,以方便JaScript中的对象的传输。例如:
var Animals = new Object();
Animals.name = "dog";
Animals. = "Male";
Animals.age = "2";
Animals对象无法被序列化传输,将Animals对象转化为JSON字符串,也就是“{name:"dog",:"Male",age:"2"}”。这样,把该JSON字符串作为HTTP请求的一个参数传递,从而达到序列化传输Animals对象的目的。
var myObject = {nickname:"my girlfried",name:"big
pig"};
JSON
实际上充当了一种在JaScript对象和字符串之间实现相互转换的协议。由于JSON的“外表”可以看成但村的字符串,因此JSON在
JaScript的对象传输方面可以起到一定的作用。例如把对象strObject转换成字符串后进行传输,在达到目的地后通过eval方法将其还原
6、查看此时dom:(已加入a标签)成对象:
function test (o)
{alert (o.name)
}var strObject = '{nickname:"my girlfriend",name:"big pig"}';
test (eval_r("(" + strObject + ")"));
三、自定义对象构造
创建高级对象构造有两种方式:使用“this”关键字构造、使用原型prototFunction 对象(类)ype构造。如:
//使用this关键字定义构造的上下文属性
function Girl()
{this.name = "big pig";
this.age = 20;
this.standing;
this.bust;
this.hip;
}//使用prototype
function Girl(){}
Girl.prototype.name = "big pig";
Girl.prototype.age = 20;
Girl.prototype.bust;
Girl.prototype.waist;
alert(new Girl().name);
上例中的两种定义在本质上没有区别,都是定义“Girl”对象的属性信息。“this”与“prototype”的区别主要在于属性访问的顺序。如:
function Test()
{this.text = function()
{alert("defined by this");
}}
Test.prototype.test = function()
{alert("defined by prototype");
}var _o = new Test();
当访问对象的属性或者方法是,将按照搜索原型链prototype
chain的规则进行。首先查找自身的静态属性、方法,继而查找构造上下文的可访问属性、方法,查找构造的原型链。
“this”
与“prototype”定义的另一个不同点是属性的占用空间不同。使用“this”关键字,示例初始化时为每个实例开辟构造方法所包含的所有属性、方法
所需的空间,而使用“prototype”定义,由于“prototype”实际上是指向父级的一种引用,仅仅是个数据的副本,因此在初始化及存储上都比
“this”节约资源。
js怎么遍历数组中的对象的属性
二、使用JSON符号如果这个数组不是json的话,就可以for(var i=0;i
if(typeof array[i] == "object){
this.age = age;for(var key in array[i]){
//这里的array[i][key]就能遍历array数组里的对象的属性值了,key就是属性名,
}}
如果最初的array也是个对象的话,就把for(var i=0;i
版权声明:图片、内容均来源于互联网 如有侵权联系836084111@qq.com 删除