2012-04-17 26 views
5

我創造了這個對象和它的屬性:爲什麼我的for循環無法使用我的Javascript屬性?

var obj = {}; 

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

var name = "John"; 

Object.defineProperty(obj, "name", { 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

於是我叫一個for循環對他們說:

for (var prop in obj) { 
    console.log(prop); 
} 

它根據我的教程,應該產生以下結果:

value 
name 

但是,它只顯示價值。爲什麼名稱不顯示?

+0

請接受解決您的問題的答案之一。當他們面對這個問題時,這將有助於其他用戶.. :) – 2012-04-17 06:07:01

回答

6

enumerable in defineProperty的默認值爲false;不可枚舉的屬性不會顯示在for…in循環中。 (這是enumerable標誌的全部內容。)如果您還將enumerable:true添加到第二個定義中,它將「修復」它。

請參閱some docs

5

因爲name屬性沒有被定義爲枚舉,其名稱定義設置

Object.defineProperty(obj, "name", { 
    enumerable: true, 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

,它會顯示出來。

相關問題