谁能启发我,两者之间有什么区别hasOwnProperty
和propertyIsEnumerable
:
function f(){
this.a = 1;
this.b = 2;
this.c = function(){}
}
f.prototype = {
d : 3,
e : 4,
g : function(){}
}
//creating the instance of an object:
var o = new f();
//And here I can't see difference.
//In my opinion they are doing the same thing
console.log("o.hasOwnProperty('a'):", o.hasOwnProperty('a')); //true
console.log("o.hasOwnProperty('b'):", o.hasOwnProperty('b')); //true
console.log("o.hasOwnProperty('c'):", o.hasOwnProperty('c')); //true
console.log("o.hasOwnProperty('d'):", o.hasOwnProperty('d')); //false
console.log("o.hasOwnProperty('e'):", o.hasOwnProperty('e')); //false
console.log("o.hasOwnProperty('g'):", o.hasOwnProperty('g')); //false
console.log("o.propertyIsEnumerable('a')", o.propertyIsEnumerable('a')); //true
console.log("o.propertyIsEnumerable('b')", o.propertyIsEnumerable('b')); //true
console.log("o.propertyIsEnumerable('c')", o.propertyIsEnumerable('c')); //true
console.log("o.propertyIsEnumerable('d')", o.propertyIsEnumerable('d')); //false
console.log("o.propertyIsEnumerable('e')", o.propertyIsEnumerable('e')); //false
console.log("o.propertyIsEnumerable('g')", o.propertyIsEnumerable('g')); //false
如我错了请纠正我
最佳答案
“propertyIsEnumerable”函数始终排除不会为“hasOwnProperty”返回true
的属性。您没有做任何事情来使任何属性都无法枚举,因此在测试中结果是相同的。
您可以使用“defineProperty”定义不可枚举的属性; MDN的see this reference。
Object.defineProperty(obj, "hideMe", { value: null, enumerable: false });
这就像:
obj.hideMe = null;
但该属性不会显示在
for ... in
循环中,并且使用propertyIsEnumerable
进行的测试将返回false
。如果不是很明显,那么整个主题都是关于旧浏览器不具备的功能。
关于javascript - hasOwnProperty vs propertyIsEnumerable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10968962/