JavaScript 原型学习笔记(prototype)
本质:也是一个对象,是function的一个属性,且一开始就有
定义:构造函数构造出对象的公共祖先
作用(应用):给相同构造函数生成的所有对象赋同一个值
注意:1.虽然可以通过prototype赋值,但若自身有这个属性,就不会用祖先上的,而是用自己的
2.且并不能用<对象>.属性来修改和删除
例子:
function Car(){} var c1=new Car(); Car.prototype.name="111"; console.log(c1.name);//输出111 console.log(c1.constructor);//输出function Car(){} //constructor 是系统隐式给的,但可以手动修改
__proto__ =>c1的一个属性,指向构造函数的原型对象
c1.__proto__即Car.prototype;
作用(应用):当在对象(c1)上查找一个属性倘若没有找到这个属性,就会通过__proto__去查找Car.prototype那里有没有你需要找的属性
但是!!!(还是用上面的例子
Car.prototype和c1.__proto__在其中一个发生改变时“两不相干”,指在其中一个的值发生改变时,并不会影响另外一个的
特殊的 prototype的修改问题!
例子:
function Car(){} Car.prototype.name="111"; //开始修改 Car.prototype.name="222";//修改方式一 Car.prototype={ name:"333" }//修改方式二 var a=new Car(); //两种情况下Console.log(a.name) Console.log(a.name);
如上两种情况:
情况一:输出为222 =>在这种情况下修改的是原地址即prototype.name
情况二:输出为111 =>修改的是Car.prototype整个的地址指向,并没有修改到Car.prototype.name
原文:https://www.cnblogs.com/tomatofjy/p/11761014.html