标签:
| /** | |
| *@author 程无衣 | |
| *@description 关于在原型对象中属性被覆盖 | |
| */ | |
| function Person(){} | |
| Person.prototype={ | |
| constructor:Person, | |
| age:24 | |
| } | |
| var person1= new Person(); | |
| person1.age=20; | |
| console.log(person1.age);//20 | |
| /*输出的是实例的age属性 | |
| 说明Person原型对象的age属性被实例 | |
| 的age属性覆盖了 | |
| */ | |
| var person2= new Person(); | |
| console.log(person2.age);//24 | |
| //输出的是Person的原型对象中的age属性 | |
| //--------------------------------------------------------------------- | |
| //如果说构造函数中也有属性的话会怎么样呢? | |
| function Person(){ | |
| this.age=26; | |
| } | |
| Person.prototype={ | |
| constructor:Person, | |
| age:24 | |
| } | |
| var person1= new Person(); | |
| person1.age=20; | |
| console.log(person1.age);//20 | |
| /* | |
| 我们发现实例化后的属性没有受到影响,当需要age属性 | |
| 的时候,原型链首先还是在实例的属性中搜索这个age属性 | |
| 所以我们看到person2.age的值等于20 | |
| */ | |
| var person2= new Person(); | |
| console.log(person2.age);//26 | |
| //构造函数定义的就是实例的属性,所以这里的person2的age属性是26 | |
| delete person2.age; | |
| //使用delete删除实例的属性 | |
|
console.log(person2.age);//24 console.log(person2.name);//undefined |
|
|
//正如期待的那样,实例的属性被删除后,在原型对象处搜索到了age属性
总结:在js的原型中。属性的搜索顺序是从实例属性开始,没有,再沿着原型链找到原型对象。再没有,就返回未定义。 下次加入继承再来看看是不是按照预期的实现链式查找。 未完待续 |
标签:
原文地址:http://www.cnblogs.com/ChengWuyi/p/4657379.html