js对象小记

  js中每个对象都连接到一个原型对象,并且可以从中继承属性。所有通过对象字面量创建的对象都连接到Object.prototype。

  当我们创建一个新对象时,可以通过Object.create()函数来创建一个使用原对象为其原型的新对象。

var a ={
    name:"liu",
    nickname:"lh"
}
var anotherA = Object.create(a);
anotherA.nickname = "chu";
for(var i in anotherA){
   console.log(i+":"+anotherA[i]);
}

  发现输出的name与nickname顺序发生了改变

nickname:chu
name:liu

  因此这也是我们不推荐使用for in的原因。因为输出的顺序是不定的。

  然而,原型连接在更新时是不起作用的。当我们对新对象作出改变时,不会触及该对象的原型。当我们尝试去获取某个属性值,但改对象没有该属性,那么js会从原型对象中获取属性值。如果那个原型对象也没有该属性,那么就再去它的原型中寻找,直到终点Object.prototype为止。原型关系是一个动态关系,如果在对象创建之后再向原型对象添加属性,那么从该对象上仍然能访问到该属性。

a.age = "21";
anotherA.age;//21

  为了判断该属性是不是对象独有的属性,可使用hasOwnProperty方法,hasOwnProperty不会检查原型链。

anotherA.hasOwnProperty("nickname");//true
anotherA.hasOwnProperty("name");//false

  我们可以通过delete来删除对象的属性。这样对象的属性就再次指向了原型对象的属性值。

delete anotherA.nickname;
anotherA.nickname;//"lh"
原文地址:https://www.cnblogs.com/liuhanz/p/4792271.html