2017-06-21 106 views
1

我有一個JavaScript對象,它具有使用Object.defineProperty函數創建的一些屬性。我想使用「for in」方法來遍歷它的所有屬性,但是這些屬性被忽略。有另一種方法可以做到這一點嗎?如何通過Object.defineProperty定義的「for in」循環訪問JavaScript對象的屬性

var myObject = { 
 
    prop1: "This is property 1", 
 
    prop2: "This is property 2" 
 
}; 
 
(function(){ 
 
    var prop3 = "This is a read only property"; 
 
    Object.defineProperty(myObject, "prop3", { 
 
    get: function(){ 
 
     return prop3; 
 
    }, 
 
    set: function(){ 
 
     console.warn('"myObject.prop3" is read only.'); 
 
    } 
 
    }); 
 
})(); 
 

 
alert("Property 3 = " + myObject.prop3); 
 

 
for(var k in myObject){ 
 
    alert(myObject[k]); 
 
}

第一個提醒我們展示了「prop3」是與Object.defineProperty定義的不動產,但是當我們通過使用「爲」循環「prop3」屬性迭代被忽略。

回答

3
Object.defineProperty(myObject, 'prop3', { 
    enumerable: true 
}); 

希望我幫助;)

以供將來參考:MDN

1

這不是for in循環,但也許仍然是對你不夠好。你可以用Object.getOwnPropertyNames得到這些屬性名稱,然後循環遍歷它們:

var propNames = Object.getOwnPropertyNames(myObject); 
for(var i=0; i<propNames.length; i++) { 
    alert(myObject[propNames[i]]); 
} 
+0

很好的答案,但@ komnions的答案更符合我所尋找的內容。但我仍然給你一個「上」。 –

相關問題