2017-01-31 40 views
3

這裏的對象認定中:我如何遍歷一個對象,它使用的吸氣劑的JavaScript

var Vars = new function(){ 
    var that = this; 
    this.assign = function(name) { 
     var realValue = undefined; 
     Object.defineProperty(that, name, { 
      configurable: true, 
      get: function() { 
       //console.log("Get"); do something... 
       return realValue; 
      }, 
      set: function(v) { 
       //console.log("Set"); do something... 
       realValue = v; 
      } 
     }); 
    } 
    this.destroy = function(name) { 
     return delete that[name]; 
    } 
}; 

但我發現我不能在這個對象由我所希望的方式進行迭代。

>> Vars.assign("key") 
<- undefined 
>> Vars.key = 1 
<- 1 
>> Vars.key 
<- 1 
>> for(var i in Vars){console.log(i);} 
assign 
destroy 
<- undefined 

當我迭代對象時,我怎麼能達到「關鍵」?

+0

你需要'枚舉:TRUE'以及 – abhishekkannojia

回答

4

您必須在屬性描述符處明確指出您的屬性是可枚舉的。默認值是false。這就是爲什麼當你使用for..in時沒有得到它的原因。據MDN

的了... in語句遍歷一個 對象,以任意順序的枚舉的屬性。對於每個不同的屬性,可以執行語句 。

關於枚舉屬性,因爲它是說明here

枚舉

當且僅當此屬性中 枚舉相應對象的屬性的顯示出來。默認爲 錯誤。

var Vars = new function(){ 
 
    var that = this; 
 
    this.assign = function(name) { 
 
     var realValue = undefined; 
 
     Object.defineProperty(that, name, { 
 
      configurable: true, 
 
      // This is the missing line 
 
      enumerable: true, 
 
      get: function() { 
 
       //console.log("Get"); do something... 
 
       return realValue; 
 
      }, 
 
      set: function(v) { 
 
       //console.log("Set"); do something... 
 
       realValue = v; 
 
      } 
 
     }); 
 
    } 
 
    this.destroy = function(name) { 
 
     return delete that.Local[name]; 
 
    } 
 
}; 
 
Vars.assign("key"); 
 
for(var i in Vars){console.log(i);}