簡體   English   中英

使用Object.defineProperty定義時,如何使用“ for in”循環訪問JavaScript對象的屬性

[英]How to access the properties of a JavaScript object using a “for in” loop when they are defined with `Object.defineProperty`

我有一個JavaScript對象,該對象具有一些使用Object.defineProperty函數創建的Object.defineProperty 我想使用“ for in”方法遍歷它的所有屬性,但是這些屬性將被忽略。 我還有其他方法可以做到這一點嗎?

 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定義的真實屬性,但是當我們使用“ for in”循環遍歷屬性時,“ Object.defineProperty ”將被忽略。

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

希望我有所幫助;)

供將來參考: MDN

這不是for in循環的,但也許對您來說仍然足夠。 您可以使用Object.getOwnPropertyNames獲得這些屬性名稱,然后循環遍歷它們:

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

暫無
暫無

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

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