簡體   English   中英

我如何遍歷在 javascript 中使用 getter 的對象

[英]How do i iterate over an object which used getter in 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

當我迭代對象時,我怎么能到達“關鍵”?

您必須在屬性描述符中明確聲明您的屬性是可枚舉的。 默認值為假。 這就是為什么您在使用for..in時沒有得到它的原因。 根據MDN

for...in 語句以任意順序迭代對象的可枚舉屬性。 對於每個不同的屬性,都可以執行語句。

關於可枚舉屬性,正如此處所述

可枚舉的

當且僅當在枚舉相應對象的屬性期間出現此屬性時才為 true。 默認為假。

 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);}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM