2012-08-29 8 views
5

मैं इस तरह जावास्क्रिप्ट में एक नेस्टेड वस्तु है:जावास्क्रिप्ट नेस्टेड वस्तु का उपयोग रूट स्तर

{ 
nameRoot: "my object", 
sub: { 
    nameSub: "my sub object" 
} 
} 

मैं एक समारोह के उप में परिभाषित से nameRoot का उपयोग करना चाहते हैं।

एक समारोह मैं की तरह कुछ परिभाषित है | का उपयोग करना:

var self = this; 

और स्वयं का इस्तेमाल किया है, लेकिन मैं कैसे एक शाब्दिक वस्तु में ऐसा कर सकते हैं?

+0

मुझे विश्वास नहीं है कि आप कर सकते हैं। मुझे अपने सिर के शीर्ष पर पोस्ट के बारे में पता नहीं है, लेकिन मुझे हाल ही में स्टैक ओवरव्लो पर इसे पढ़ना याद है। क्या आप ऑब्जेक्ट को अक्षर के बजाय उस ऑब्जेक्ट को फ़ंक्शन के रूप में परिभाषित कर सकते हैं? – Brad

+2

आप नहीं कर सकते। लेकिन एक वस्तु संदर्भ के बिना नहीं है, तो कहीं आपके पास उस ऑब्जेक्ट का संदर्भ होना चाहिए जिसमें आप हैं, नहीं? – David

+1

यही कारण है कि नोड्स और इस तरह की आवश्यकता को 'parentNode' पर स्पष्ट संदर्भ होना चाहिए। – voithos

उत्तर

1

निम्नलिखित कोड आपको मूल तत्व से लिंक करने और पेर-इन में लूप में दिखाई देने से बचने की अनुमति देता है।

var parent = { a: 1 }; 
var child = { b: 2 }; 

Object.defineProperty(
    child, 'parent', 
    { value: parent, 
     enumerable: false } 
); 

parent.child = child; 

child.performAction = function() { 
    console.log(this.parent.a) // 1 
} 
0

तो ऐसा करने का सबसे अच्छा तरीका w/function scope है।

var func = new myFunc(); 
func.sub = new myFunc(); 
func.sub.nameRoot = "my sub object"; 

जाहिर है यह करने के लिए होशियार तरीके (जैसे समारोह पैरामीटर के माध्यम से नाम से पारित) कर रहे हैं, लेकिन यह सामान्य पद्धति है:

function myFunc(){ 
    this.nameRoot = "my object"; 
} 

तो आप की तरह कुछ कर सकता है।

+0

प्रश्न: _ लेकिन मैं इसे "शाब्दिक वस्तु" में कैसे कर सकता हूं _ –

+0

आप नहीं कर सकते हैं, यही कारण है कि मैंने इसे सुझाए गए तरीके से ऐसा करने के लिए कहा। – Paul