2012-04-17 10 views
5

मैं इस वस्तु बनाया है और यह गुण है:मेरे जावास्क्रिप्ट गुणों पर लूप के लिए मेरा काम क्यों नहीं कर रहा है?

var obj = {}; 

Object.defineProperty(obj, "value", { 
    value: true, 
    writable: false, 
    enumerable: true, 
    configurable: true 
}); 

var name = "John"; 

Object.defineProperty(obj, "name", { 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

तो फिर मैं उन पर पाश के लिए एक फोन:

for (var prop in obj) { 
    console.log(prop); 
} 

कौन सा मेरी ट्यूटोरियल के अनुसार, निम्नलिखित परिणाम चाहिए:

value 
name 

लेकिन इसके बजाय यह केवल मूल्य प्रदर्शित करता है। नाम क्यों नहीं दिख रहा है?

+0

कृपया अपनी समस्या का समाधान करने वाले उत्तरों में से एक को स्वीकार करें। यह भविष्य में अन्य उपयोगकर्ता की सहायता करता है जब उन्हें इस समस्या का सामना करना पड़ता है .. :) –

उत्तर

6

enumerabledefineProperty में false में डिफ़ॉल्ट मान; गैर-संख्यात्मक गुण for…in लूप में दिखाई नहीं देते हैं। (यह enumerable ध्वज का पूरा बिंदु है।) यदि आप अपनी दूसरी परिभाषा में enumerable:true भी जोड़ते हैं, तो यह इसे 'ठीक' कर देगा।

some docs देखें।

5

क्योंकि नाम संपत्ति गणनीय के रूप में परिभाषित नहीं है,

Object.defineProperty(obj, "name", { 
    enumerable: true, 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

के नाम परिभाषा तय करने और यह दिखाई देगा।

संबंधित मुद्दे