所有开发人员定义的属性都是可枚举的。
for-in
返回所有能够通过对象访问的、可枚举的属性,包括存在于实例中的属性,也包括存在于原型(原型链上所有原型)中的属性。屏蔽了原型中不可枚举属性的实例属性也会返回。
instanceObj.hasOwnProperty(prop)
继承自:Object.prototype.
所以所有对象都有此方法。
只有属性prop存在于对象实例中时,才会返回true。
function Person() {}
Person.prototype = {
name : "xgs",
age : "23"
}
var p1 = new Person();
p1.hasOwnProperty("name");//false
p1.name = "zl";
p1.hasOwnProperty("name");//true
结合in和hasOwnProperty
//判断属性是否为原型属性
function hasPrototypeProperty(obj, prop) {
return !obj.hasOwnProperty(prop) && (prop in obj);//返回true时表明,对象的prop属性是存在于原型上的;返回false时,要么不存在该属性,要么是实例属性
}
网友评论