@原型链
原型链
讲原型一个不可避免的概念就是原型链,原型链是通过前面两种创建原型Object.create()或dog.prototype的方式生成的一个_prtoto_指针来实现的。
function foo(){
foo.prototype.z=3;
}
var obj = new foo();
obj.x = 1;
obj.y = 2;
console.log(obj);//foo {x: 1, y: 2}
console.log(obj.z);//3
对象obj上是没有z的,但是他的原型链上有z,所以查找的时候如果对象本身不存在的话就会沿着原型链往上查找
obj.z=5;
console.log(obj.z);//5
console.log(foo.prototype.z);//3
如果对象上有的话则不会向原型链上查找,而且并不会改变原型链上的值
总结一下原型链作用:对象属性的访问修改和删除。
访问。优先在对象本身查找,没有则顺着原型链向上查找
修改。只能修改跟删除自身属性,不会影响到原型链上的其他对象。
总结
由于所有的实例对象共享同一个 prototype 对象,那么从外界看起来,prototype 对象就好像是实例对象的原型,而实例对象则好像”继承”了 prototype 对象一样。