使用Javascript对象,哪些属性覆盖有效且应该可以在任何浏览器中使用?
// Dot notation overrides
var obj1 = {};
obj1.hasOwnProperty = 123;
obj1.constructor = 'Oh! I am not a constructor';
console.log(obj1.hasOwnProperty); // 123
console.log(obj1.constructor); // => 'Oh! I am not a constructor'
// Braces notation overrides
var obj2 = {};
obj2['hasOwnProperty'] = 123;
obj2['constructor'] = 'Oh! I am not a constructor';
console.log(obj2['hasOwnProperty']); // 123
console.log(obj2['constructor']); // => 'Oh! I am not a constructor'
在Firefox和Chrome中,所有这些都有效,但这是正常的吗?我能安全地依赖这个吗?
如果是,是否有任何对象属性无法以这种方式覆盖?
P.S。我不是说“覆盖hasOwnProperty
是不安全的,因为有人可以调用你对象的hasOwnProperty
”。
我只是说是否应该覆盖才能正常工作。
答案 0 :(得分:0)
是的,这些都是完全有效的。实际上,点和括号表示完全相同,所以没有理由比较它们。
如果你真的很担心,你可以这样做,但没有必要:
var obj = Object.create(null);
console.log(obj.hasOwnProperty); // undefined
console.log(obj.constructor); // undefined