首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

对象属性的查寻顺序

2012-10-27 
对象属性的查找顺序Therefore, property inheritance occurs only when you read property values, not wh

对象属性的查找顺序
Therefore, property inheritance occurs only when you read property values, not when you write them. If you set the property p in an object o that inherits that property from its prototype, what happens is that you create a new property p directly in o. Now that o has its own property named p, it no longer inherits the value of p from its prototype. When you read the value of p, JavaScript first looks at the properties of o. Since it finds p defined in o, it doesn't need to search the prototype object and never finds the value of p defined there. We sometimes say that the property p in o "shadows" or "hides" the property p in the prototype object. Prototype inheritance can be a confusing topic.

“读”属性的时候存在原型继承,而“写”属性的时候没有原型继承。自身的属性会覆盖从prototype继承得到的属性。

-----------------------------分隔线---------------------------

利用原型继承,可以扩展javascript中的原始类型。

function Animal(nAge){    this.age = nAge;}Animal.prototype.eat = function(){    // eat something};function Cat(sName){    this.name = sName;}Cat.prototype = new Animal();Cat.prototype.constructor = Cat;var cat = new Cat("kitty");cat.eat();

当调用cat.eat()时,查找eat()方法的顺序是这样的:
1.首先在cat对象自身上查找,没找到。
2.在Cat.prototype属性上找,没找到。
3.Cat.prototype已经被指向一个Animal的实例,于是在这个匿名实例上查找,没找到。
4.在Animal.prototype属性上查找,找到了。
5.假设在步骤4中还是没找到,由于Animal.prototype本身是一个Object,接下来还会在Object上查找。

热点排行