2012-12-25 12 views
9

संभव डुप्लिकेट:
Self-references in object literal declarationsजे एस में मौजूदा ऑब्जेक्ट के गुणों को संदर्भित करने के लिए कैसे

मैं इस उदाहरण की तरह जे एस में कुछ सरल वस्तुओं है:

var object = { 
firstname : 'john', 
lastname : 'paul', 
wholename : firstname + lastname 
} 

खैर इस सरल बात काम नहीं करती है; जॉन और पॉल को व्हायोलैम में अपरिभाषित किया गया है, इसलिए मैंने 'इस' ऑपरेटर का उपयोग करने की कोशिश की जो केवल तभी काम करता है यदि मैं (getWholeName(){return this.firstname+this.lastname}) पर काम करता हूं। लेकिन अगर मैं एक चर का उपयोग करना चाहता हूं और फ़ंक्शन नहीं, तो मैं कैसे कर सकता हूं? मैंने object.firstname + object.lastname भी कोशिश की लेकिन यह काम नहीं करता है।

उत्तर

11

वस्तु संदर्भ के लिए कोई तरीका नहीं है, लेकिन आप गतिशील गुण जोड़ सकते हैं:

var object = { 
    firstname : 'john', 
    lastname : 'paul' 
}; 

object.wholename = object.firstname + object.lastname; 

संपादित करें:

और क्यों एक समारोह में लपेट नहीं?

var makePerson = function (firstname, lastname) { 
    return { 
     firstname: firstname, 
     lastname: lastname, 
     wholename: firstname + lastname // refers to the parameters 
    }; 
}; 

var object = makePerson('john', 'paul'); 
+0

ठीक है धन्यवाद। मैं ऐसा क्यों कर रहा हूं कि मैं एक विशाल वेब ऐप में एक व्यवस्थित कोड रखने की कोशिश कर रहा हूं; और इसलिए मैंने इस तरह की वस्तुओं में समान कार्यों और चर को फिर से व्यवस्थित करने का निर्णय लिया। क्या यह करने का सही तरीका है? मुझे टाइपस्क्रिप्ट और मॉड्यूल के बारे में पता है, लेकिन क्या मुझे कार्यों/चर के समूहों के रूप में सरल कुछ हासिल करने के लिए टीएस का उपयोग करने की आवश्यकता है? – Rayjax

+2

@ user1397271 आप इसे सादा जेएस में कर सकते हैं: नामस्थानों को शुरू करने का प्रयास करें (जैसे var MYAPP = {}; MYAPP.data = ...) और छोटे कार्यों को छोटे में तोड़ने का प्रयास करें। मॉड्यूल पैटर्न का उपयोग करने पर विचार करें: http://www.adequatelygood.com/2010/3/JavaScript- मॉड्यूल- पैटर्न-In-Depth – Stefan

+0

जब आप var MYAPP = {} जैसे नामस्थान कहते हैं, तो इसका मतलब है कि यह मेरे उदाहरण जैसा ही है var object = {} के साथ, तो क्या मैं उस समस्या में भाग जाऊंगा जिसके बारे में मैं पूछ रहा था? – Rayjax

2

जावास्क्रिप्ट में, प्रत्येक कार्य एक वस्तु है। आप इस प्रकार का समारोह के रूप में अपने ऑब्जेक्ट के निर्माता की घोषणा करना चाहिए:

function person(firstname,lastname) 
{ 
this.firstname=firstname; 
this.lastname=lastname; 

this.wholeName=wholeName; 

//this will work but is not recommended. 
function wholeName() 
{ 
return this.firstname+this.lastname; 
} 
} 

आप इसे अच्छी तरह से प्रोटोटाइप, जो काम करने के सिफारिश तरीका है के आधार पर आपके वस्तु के लिए अतिरिक्त तरीकों जोड़ सकते हैं। यहां अधिक जानकारी:

http://www.javascriptkit.com/javatutors/proto.shtml

+0

यदि सबकुछ है एक समारोह ... यह क्या है => 'var obj = {1: 1,2: 2}'? – charlietfl

+0

आप सही हैं, लेकिन हर समारोह एक वस्तु है हालांकि। मेरा मतलब यही था। मैं सही हो गया :) – user1574041

+0

क्या आपने इसे w3schools या किसी अन्य वेबसाइट से हटा दिया था? – 0x499602D2

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