2013-11-24 82 views
0

使用Javascript對象,其中屬性覆蓋有效,應該可以在任何瀏覽器中工作(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

你說的是主機對象或本地對象? – David

+0

@David原生對象,我想。用大括號創建:'obj = {};' – thybzi

回答

0

是的,這些都是完全有效的。實際上,點和括號符號完全一樣,所以沒有理由比較這些。

如果你真的很擔心,你可以做這樣的事情,但它不是必需的:

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

感謝您解除疑惑! (有了名聲,我不能投票。) – thybzi

+0

@ThyBzi不客氣!您仍然可以接受答案,方法是單擊左側的綠色複選標記。歡迎來到堆棧溢出! :) – Doorknob