对实例中属性或者方法的访问时,先从实例的对象中寻找,如果不存在则在原型中寻找。
所以:如果原型中有某个属性,在实例对象中在重写则会隐藏原型的属性访问。
function Person(){} Person.prototype.name = "Jack"; Person.prototype.sayName = function(){ alert(this.name); } var p1 = new Person(); alert(p1.hasownProperty("name")); //false hasownProperty方法是判断实例中是否存在此属性 alert("name" in p1); //true in操作符是判断实例和原型中是否存在此属性 p1.name = "Tom"; alert(p1.name) // Tom 隐藏了原型的属性 delete p1.name; alert(p1.name); //Jack
但是如果重写了prototype 则会破坏原有的搜索方式
比如:
Person.prototype = { name : "Jack", sayName : function (){ alert(this.name); } } var p1 = new Person(); p1.sayName() //error
此时则会报错,因为原型链被破话,搜索不到原型的sayName方法了。
时间: 2024-10-21 18:24:22