标签:
原型链
由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自己的原型,这样就组成了一条链,这个就是原型链,JavaScritp引擎在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则返回undefined.原型链一般实现为一个链表,这样就可以按照一定的顺序来查找。
原型链代码实例
1 function Father(){ 2 this.name="father"; 3 this.age=40; 4 this.sayName=function(){ 5 alert(this.name); 6 } 7 } 8 9 function Child(){ 10 this.age="22"; 11 this.name = "child"; 12 } 13 14 Child.prototype = new Father(); 15 16 var child = new Child(); 17 child.sayName(); //child
重温了昨天学习的继承,原型链的模型Child->Father->Object
child调用sayName函数,由于Child对象中没有该函数,所以在其原型对象Father中查找,查找到该函数后,执行该函数,结果为child
原型的动态性
大多情况下,我们修改原型链,对象实例都会随着原型链做出相应的改变:
1 function Person(){ 2 this.name = "wutian"; 3 } 4 5 var per = new Person(); 6 alert(per.name);//wutian 7 8 Person.prototype.age = 22; 9 alert(per.age);//22
但是需要注意以下情况:
1 function Person(){ 2 this.name = "wutian"; 3 } 4 5 var per = new Person(); 6 alert(per.name);//wutian 7 8 Person.prototype = {name:"little-tian",age:22}; 9 alert(per.name);//wutian 10 alert(per.age);//undefined
因为第8行的代码重写了整个person的原型,因为重写原型对象会切断现有原型对象与原来已经存在的任何对象实例之间的联系,它们包含的指针[[prototype]]仍然指向原来的原型对象
标签:
原文地址:http://www.cnblogs.com/smart-tian/p/4626125.html