2011-09-15 13 views
12

संभव डुप्लिकेट पर उसकी अपनी प्रॉपर्टी को संदर्भित:
Self-references in object literal declarationsवस्तु initilization

यह किया जा सकता है?(जाहिर है इस वाक्य में नहीं)

var a = { 
    b : 10, 
    c : this.b * 2 // returns 'undefined' 
}; 

मैं भी कोशिश की है

var a = { 
    b : 10, 
    c : a.b * 2 // throws error 'a is undefined' 
}; 

और

var a = { 
    b : 10, 
    c : b * 2 // throws error 'b is undefined' 
}; 

यह मेरे लिए समझ में आता है कि इन मूल्यों को अपरिभाषित कर रहे हैं, मुझे नहीं है उन्हें परिभाषित करना समाप्त कर दिया। हालांकि मुझे लगता है जैसे वहाँ इस तरह एक वस्तु की संरचना और c पर b

+0

ध्यान दें कि आप संकलन समय पर 'बी' शुरू कर रहे हैं, इस पर सशर्त क्यों होगा? आप पहले ही जानते हैं कि यह क्या है! –

+0

जो मैंने पोस्ट किया है वह एक सरल उदाहरण है। मैं हमेशा नहीं जानता कि 'बी' क्या है। अन्यथा मुझे इसे सशर्त बनाने की आवश्यकता नहीं होगी। सोचो 'बी: फ़ंक्शन (एक्स) {/ * कुछ सामान करें */वापसी y;}, ' – rlemon

+0

@ चाड 1. जेएस संकलित नहीं है, 2. एक चर के साथ एक अभिव्यक्ति के साथ एक चर शुरू करने के लिए यह सामान्य है, और अन्य भाषाओं (जैसे सी) इसे पूरी तरह से अच्छी तरह से प्रबंधित करें। – Alnitak

उत्तर

10

वैकल्पिक रूप से, आप आप को देने के लिए एक आत्म प्रारंभिक समारोह का उपयोग कर सकते एक समान करने के लिए प्रभावित कर क्या आप देख रहे हैं:

var a = (function() { 
    var b = 10; 
    return { 
     b:b, 
     c:b*2 
    } 
})(); 

console.log(a.c); 
+3

मुझे यह पसंद है, लगभग * हैकी * – rlemon

+1

@ ड्रमोन लगता है: यदि आपको यह पसंद है, तो आप इसे दो हिस्सों में क्यों नहीं करते हैं ताकि आप फ़ंक्शन ओवरहेड को रद्द कर सकें? वास्तव में, यह अव्यवस्था है। यह अभी भी सब कुछ दो चरणों में कर रहा है और इसके शीर्ष पर, आप एक अनावश्यक कार्य कर रहे हैं। – vol7ron

1

वस्तु शाब्दिक अंकन का उपयोग नहीं सशर्त हो होने के लिए एक समाधान हो सकता है, लेकिन आप इसे बनाने के लिए कार्यों का उपयोग कर सकते हैं:

function Structure(value) { 
    this.b = value; 
    this.c = 2 * value; 
} 

var a = new Structure(10); 

या

function makeStructure(value) { 
    return {b:value, c:2*value}; 
} 

var a = makeStructure(10); 
संबंधित मुद्दे