【发布时间】:2013-11-24 14:39:54
【问题描述】:
使用 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 中,所有这些都可以正常工作,但这是正常的吗?我可以放心地依赖它吗?
如果是,是否有任何对象属性无法以这种方式覆盖?
附:我不是在说“覆盖hasOwnProperty 是不安全的,因为有人可以调用你的对象的hasOwnProperty”。
我只是说这些覆盖是否应该起作用。
【问题讨论】:
-
你说的是宿主对象还是原生对象?
-
@David Native 对象,我想。仅使用花括号创建:
obj = {};
标签: javascript object inheritance