(Javascript)重写对象内置或继承的属性?

(Javascript)重写对象内置或继承的属性?,javascript,object,inheritance,Javascript,Object,Inheritance,使用Javascript对象时,这些属性重写中的哪一个是有效的,应该在任何浏览器中工作 //点表示法覆盖 var obj1={}; obj1.hasOwnProperty=123; obj1.constructor='哦!我不是一个构装师; console.log(obj1.hasOwnProperty);//123 console.log(obj1.constructor);//=>'哦我不是一个构装师 //大括号表示法覆盖 var obj2={}; obj2['hasOwnProperty'

使用Javascript对象时,这些属性重写中的哪一个是有效的,应该在任何浏览器中工作

//点表示法覆盖
var obj1={};
obj1.hasOwnProperty=123;
obj1.constructor='哦!我不是一个构装师;
console.log(obj1.hasOwnProperty);//123
console.log(obj1.constructor);//=>'哦我不是一个构装师
//大括号表示法覆盖
var obj2={};
obj2['hasOwnProperty']=123;
obj2['constructor']='Oh!我不是一个构装师;
console.log(obj2['hasOwnProperty']);//123
console.log(obj2['constructor']);//=>'哦我不是一个构装师
在Firefox和Chrome中,所有这些都可以工作,但这正常吗?我可以放心地依靠这个吗

如果是,是否有任何对象属性不能以这种方式重写

另外,我不是说“覆盖
hasOwnProperty
是不安全的,因为有人可以调用对象的
hasOwnProperty
”。
我只是说那些覆盖是否应该起作用是的,它们是完全有效的。实际上,点和括号符号做的是完全相同的事情,所以没有理由比较它们

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

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

你说的是主机对象还是本机对象?@David native objects,我想。仅使用大括号创建:
obj={}谢谢你消除了我的疑虑!(以开始的声望,我不能投票。)@ThyBzi不客气!通过单击左侧的绿色复选标记,您仍然可以接受答案。欢迎使用堆栈溢出!:)