[英]How do I iterate over the properties of an Object's prototype in JavaScript?
[英]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.