2011-01-06 10 views
32

मैं इस तरह कुछ करने की कोशिश कर रहा हूं:क्या मैं जावास्क्रिप्ट में ऑब्जेक्ट घोषणा के दौरान अन्य गुणों का संदर्भ दे सकता हूं?

var obj = { 
    a: 5, 
    b: this.a + 1 
} 

(5 की बजाय एक ऐसा फ़ंक्शन है जिसे मैं दो बार निष्पादित नहीं करना चाहता हूं जो संख्या देता है)

मैं obj.b असाइन करने के लिए इसे फिर से लिख सकता हूं बाद में obj.a से, लेकिन क्या मैं इसे घोषणा के दौरान तुरंत कर सकता हूं?

+2

आप इसे का प्रयास किया था के शेष भाग के लिए वस्तु शाब्दिक संरचना रखने होगा?!? – ken

+0

@ken 'this.a' अपरिभाषित – serg

+0

' जावास्क्रिप्ट: var obj = {a: 5, b: this.a + 1}; अलर्ट (obj.b); 'अलर्ट NaN, तो नहीं। – Ben

उत्तर

27

जावास्क्रिप्ट में नंबर this काम नहीं करता है: यह मैं क्या उपयोग होता है। इस मामले में this वैश्विक वस्तु को संदर्भित करता है।

समारोह प्रकरण

foo(); 

यहाँ thisवैश्विक वस्तु का उल्लेख होगा:

केवल 3 मामलों में मूल्य this सेट हो जाता है कर रहे हैं।

विधि प्रकरण

test.foo(); 

इस उदाहरण this में test के पास भेजेगा।

The Constructor प्रकरण

new foo(); 

एक समारोह कॉल है कि एक निर्माता के रूप में new कीवर्ड कृत्यों से पहले है। फ़ंक्शन के अंदर thisObject बनाया गया एक नया देखेंगे।

हर जगह, this वैश्विक वस्तु को संदर्भित करता है।

+1

+1 अच्छा जवाब। केवल जब मैं '.call()' या '.apply()' के माध्यम से फ़ंक्शन या विधि केस का उपयोग करके स्पष्ट रूप से सेट किया गया था तो मैं मामला जोड़ूंगा। (शायद उन दो मामलों के सबसेट का अधिक।) – user113716

+0

हां, उन्हें जोड़ा जा सकता है, लेकिन वे यहां आईएमओ के दायरे से बाहर हैं, हालांकि मैं उन्हें अपने दस्तावेज़ों में जोड़ दूंगा। –

+0

मैं सहमत हूं। मुझे लगता है कि आपके उत्तर में प्रश्न के लिए आवश्यक आधार शामिल हैं। – user113716

4

यह सही मान चाहिए:

function() { 
    var aVar = 5; 
    var bVar = aVar + 1; 

return { 
    a : aVar, 
    b : bVar; 
} 
}(); 
2

नहीं, आपके उदाहरण में, this का मूल्य वस्तु शाब्दिक का उल्लेख नहीं करता।

obj में किसी अन्य संपत्ति पर आधारित करने के लिए आपको ऑब्जेक्ट के निर्माण के बाद b पर एक मान असाइन करने की आवश्यकता होगी।

1

सं। this वही अर्थ लेगा जैसा कि यह परिभाषा के बाहर होगा।

0
क्रोम डिबगर में

> var o = {a: 5, b: this.a+1} 
undefined 
> o.b 
NaN 
> o.a 
5 
6

ऐसे कई तरीके है यह पूरा करने के होते हैं; की तरह आपको लगता है कि यह करता

function Obj() { 
    this.a = 5; 
    this.b = this.a + 1; 
    // return this; // commented out because this happens automatically 
} 

var o = new Obj(); 
o.b; // === 6 
2

जैसा कि यह पता चला है कि आप किसी अन्य ऑब्जेक्ट के अंदर किसी ऑब्जेक्ट का संदर्भ नहीं दे सकते हैं जब तक कि पहला कार्य नहीं होता है। लेकिन आप इसे इस तरह से कर सकते हैं।

var obj = { 
     a: 5 
    } 

    obj.b = obj.a + 1; // create field b in runtime and assign it's value 

आप console.log हैं (obj) आप

obj = { 
     a: 5, 
     b: 6 
    } 

इस तरह आप कोड

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

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