2012-07-01 10 views
6

नोड repl से:जावास्क्रिप्ट ऑब्जेक्ट प्रॉपर्टी के लिखने योग्य एन्यूमेबल और कॉन्फ़िगर करने योग्य मानों को कैसे बदला जाए?

foo = { bar: 'baz'}; 
console.log (Object.getOwnPropertyDescriptor(foo, 'bar')) 

दिए गए मान:

{ value: 'baz', 
    writable: true, 
    enumerable: true, 
    configurable: true } 

कैसे आप लिखने योग्य गणनीय, और गलत पर विन्यास बदल सकता हूँ? इन मूल्यों को क्या कहा जाता है? क्या वे ES5.1 का हिस्सा हैं? क्या वहां और अधिक है कि प्रतिलिपि आउटपुट नहीं किया था?

+0

को '' {} बटन का उपयोग करें इटालिक्स, बोल्ड इत्यादि के बिना अपने कोड को प्रारूपित करें ... –

उत्तर

13

"कैसे आप लिखने योग्य गणनीय, और गलत पर विन्यास बदल सकता हूँ?"

Object.defineProperty(foo, 'baz', { 
    enumerable:false, 
    writable:false, 
    configurable:false 
}); 

वहाँ भी Object.defineProperties है, जो, एक ही है आप एक से अधिक गुण सेट कर सकते हैं को छोड़कर, और Object.create है, जो आपको एक नई वस्तु बनाने चलो, और अपने प्रोटोटाइप वस्तु, और इसके वर्णनकर्ता निर्धारित किया है।

"इन मूल्यों को क्या कहा जाता है?"

वे संपत्ति वर्णनकर्ता हैं।

"वे ES5.1 का हिस्सा हैं?"

हाँ, ES5।

"वहाँ अधिक है कि repl उत्पादन नहीं किया?"

अधिक क्या, संपत्ति वर्णनकर्ता? संख्या

+1

एक पूरा उत्तर +1। – undefined

+0

मुझे लगता है कि यह उपरोक्त विधि IE8 द्वारा समर्थित नहीं है, लेकिन शास्त्रीय ecmascript में यानी पुराने संस्करणों में हम गुणों की गणना और विन्यास को नियंत्रित कर सकते हैं? –

+0

मैं मौजूदा ऑब्जेक्ट के डिस्क्रिप्टर कैसे बदल सकता हूं? – mqklin

1

स्क्विन: मुझे लगता है कि आपके उत्तर में थोड़ा टाइपिंग त्रुटि की तरह है।

आपका कोड:

Object.defineProperty(foo, 'baz', { 
enumerable:false, 
writable:false, 
configurable:false 
}); 

लेकिन दूसरा तर्क संपत्ति के नाम और नहीं मूल्य है, तो सही कोड होना चाहिए है:

Object.defineProperty(foo, 'bar', { 
enumerable:false, 
writable:false, 
configurable:false 
}); 
+3

तब 'संपादित करें' का उपयोग करें। – m93a

0

बस

में यह जोड़ना चाहते थे

जब आप पहले ऑब्जेक्ट बनाते हैं तो आप गुणों को बदल सकते हैं:

var newObj = Object.defineProperty({}, 'aPropertyName', { 
    enumerable:false, 
    writable:false, 
    configurable:false 
}); 

तुम भी, आप कई गुण एक ही बार में बदल सकते हैं कर सकते हैं:

var newObj = Object.defineProperties({}, { 
    aPropertyName: {enumerable: false, writable: false, configurable: false}, 
    anotherPropertyName: {enumerable: true, writable: true, configurable: false}, 
    finalPropertyName: {enumerable: true, writable: false, configurable: true}, 
}); 

और हां पिछले विधि के साथ ऑब्जेक्ट नाम में पास करने का:

Object.defineProperties(objectName, { 
    aPropertyName: {enumerable: false, writable: false, configurable: false}, 
    anotherPropertyName: {enumerable: true, writable: true, configurable: false}, 
    finalPropertyName: {enumerable: true, writable: false, configurable: true}, 
}); 
संबंधित मुद्दे