2017-06-21 9 views
1

Object.defineProperty関数を使用して作成されたいくつかのプロパティを持つJavaScriptオブジェクトがあります。私は、すべてのプロパティを "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答えは、私が探していたものの線に沿ってより多くのでした。しかし、私はまだあなたに "アップ"を与えました。 –

関連する問題