2013-04-09 31 views
0

我試圖定義一個名爲userdata的定製屬性,但對於像location.hash這樣的對象,它不起作用,我得到了false, false兩個警報調用。無法在對象上設置定製屬性

 Object.defineProperty(Object.prototype, "userdata", { 
      value: false, 
      writable: true, 
      enumerable: true, 
      configurable: true 
     }); 

     alert (location.hash.userdata); 
     location.hash.userdata = true; 
     alert (location.hash.userdata); 

它是不可變的嗎?

如果我定義自己的目標,即

var a = {}; 
a.userdata = true; 

將設置正確,我不知道爲什麼前者例如不工作

+0

'location.hash'是一個字符串,而不是一個對象。 – 2013-04-09 02:29:55

+0

建議@IliaFrenkel? – daisy 2013-04-09 02:33:09

+0

你想達到什麼目的?如@plalx所示, – 2013-04-09 02:37:02

回答

1

這是正常的,第一個警報提供虛假因爲userdata的默認值是false

然而,location.hash.userdata = true;肯定是不行的,因爲當你對待location.hash原始的字符串作爲使用點符號的對象,它會在String原始包裝包裹的原始值,然後是包裝對象後丟棄,所以它的同做new String(location.hash).userdata = true;

既然你不能做location.hash = new String(location.hash),你將有你的屬性存儲在另一個對象,因爲location.hash將永遠是一成不變的。