(Javascript)覆盖对象内置或继承的属性?

时间:2013-11-24 14:39:54

标签: javascript object inheritance

使用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”。 我只是说是否应该覆盖才能正常工作

1 个答案:

答案 0 :(得分:0)

是的,这些都是完全有效的。实际上,点和括号表示完全相同,所以没有理由比较它们。

如果你真的很担心,你可以这样做,但没有必要:

var obj = Object.create(null);
console.log(obj.hasOwnProperty); // undefined
console.log(obj.constructor); // undefined