hasOwnProperty():检测一个属性时存在于实例中,还是存在于原型中;
给定属性存在于实例中,返回ture,反之,存在于原型中,返回false;
in:可与for结合形成for-in循环,单独使用时,in操作符会在通用对象能够访问给定属性时返回ture,无论该属性存在于原型中还是实例中。
hasOwnProperty函数返回为false,in返回为ture时,可确定该属性就是原型中的属性。
hasPrototypeProperty():属性存在于原型中ture;在实例中修改属性值后,该属性返回为false;
原型对象存在的问题:
function Person(){
}
Person.prototype = {
constructor: Person,
name : "Nicholas",
age : 29,
job : "Software Engineer",
friends : ["Shelby", "Court"],
sayName : function () {
alert(this.name);
}
};
var person1 = new Person();
var person2 = new Person();
person1.friends.push("Van");
alert(person1.friends); //"Shelby,Court,Van"
alert(person2.friends); //"Shelby,Court,Van"
alert(person1.friends === person2.friends); //true
Person.prototype对象有个名为friend的属性,该属性包含一个字符串数组,然后创建了两个实例person1 person2,接着修改了person1.friend引用的数组,向数组中添加了
一个字符串。
由于person1.friend数组在于Person.prototype而非person1中,故刚刚的修改也会修改Person.prototype的值,即person2.friend的值也会被修改变为Shellby,Court,Van;