`
pollyanna
  • 浏览: 8071 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论
  • pollyanna: css中clear的作用:clear 属性定义了元素的哪边上不 ...
    CSS学习

我学对象

 
阅读更多

对象的操作

和别的数据类型不一样,我们通过引用来操作对象。这样说可能有点抽象,给个例子吧

var x = {name : 'Anna', age : 12};
var y =  x;
y.age = 22;
console.log(x.age);  -->22

因为y是对x对象的引用,所以对y的操作,会改变x的值。

 

 

对象属性的引用

.和[]都能够对对象的属性进行引用,那么他们有什么区别呢。给一段代码

var x ={name : 'Anna', age : 22};
console.log(x.name); -->Anna
console.log(x['name']); -->Anna
console.log(x['n'+'am'+'e']); -->Anna
console.log(x[name]);  ERROR!!

从上面可以看出来,用.对对象的属性进行引用的话,.后面接的是key值,而用[]对对象的属性进行引用的话,里面写的是计算结果为key的表达式。

这是因为,用.来引用对象的时候,是通过标识符来表示属性名字的,它是无法修改的。

但是用[]来引用对象的时候,是通过字符串来表示属性名字的,它是可以修改的。

我知道看到这里你一定会觉得很晕,没懂在讲什么。因为我也是这样,但是给个例子就知道啦。

var Good_friends = {};
var girls = [{id:1,name:小可},{id:2,name:阿呆}]
for(var i = 0 ; i<girls.length ; i++){
	Good_friens[girls[i].id] = girls[i];
} 

这个例子表达的意思是,把对象girl取出来,作为对象的属性,存在Good_friends里面。写的明白些,应该是这样:

Good_friends = {
1:girls[0],
2:girls[1]
}

里面每一个属性对应的值又是一个对象。

在这个例子里面可以充分体现出,用.和用[]来引用对象属性的区别。因为在这个例子里面根本不可能用.来引用对象的属性。(这也顺便介绍一下怎么给一个对象里面添加新的属性)

 

 

继承

对象里,有它自己的属性,也有从原型中继承的属性。举个栗子:

var o = {};
o.x = 1;
var p = inherit(o);
p.y = 2;
var z = inherit(z);
console.log(z.x*z.y); ->2

也就是说,如果我们要在对象中找他的一个叫做x的属性,若是这个对象里面没有x属性,那么,就会在该对象的原型中寻找x属性,若是它的原型中还是没有x属性,又去上一级原型中寻找,以此类推,直到查找到一个为null的原型。

 

属性的赋值:如果我们要对z.x进行赋值,那么首先会查看x属性是不是只读的,如果是,那么赋值失败。如果不是,那么会在对象x中创建一个属性x,然后对它进行赋值,并不会影响到原型中x的值。

 

 

delete运算符可以删除对象的属性,但是它只是断开对象属性和宿主之间的关系。
而且delete只能删除自有属性,不能删除继承属性。
删除一个不可配置的属性会报错。


检测属性
来判断一个属性是否存在于这个对象中,
一共有三个方法(只列了两个,还有一个我还没懂囧)
in运算符,hasOwnProperty()

o = {x:1};
'x' in o;  ->true
hasOwnProperty('x'); ->true  //检测自有属性
 

 

原型属性
对象的原型属性是用来继承属性的。原型属性是在实例对象创建之时就设设好的,通过new创建的对象,使用构造函数中的prototype属性作为它的原型属性。

function x() { this.name = 'ye'}
x.prototype.number = 2;
y = new x(); 
console.log(y);  ->x {name: "ye", number: 2}
(x.prototype).isPrototypeOf(y); ->true
 
以上是我在学习对象过程中的收获。

 

还剩下许多知识点还没有掌握,希望能够在以后的变成过程中,结合实际去学习。

以后会根据所学一点点更新的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics