2015-04-19 7 views
7

मैं जे एस में एक छोटा सा मुद्दा है, मैं दो नेस्टेड वस्तुओं है, और मैं बहुत की तरह माता पिता से एक चर का उपयोग करना चाहते हैं:जावास्क्रिप्ट का उपयोग पैरेंट ऑब्जेक्ट विशेषता

var parent = { 
    a : 5, 

    child: { 
     b : 3, 
     displayA : function(){ 
      console.log(this.a); 
      //undefined 
      }, 

     displayB : function(){ 
      console.log(this.b); 
      //displays 3 
      } 
     } 
} 

और मैं सिर्फ चाहते हैं जानें कि parent.child.displayA कैसे काम करें :) (मेरे पास उप-ऑब्जेक्ट्स हैं जिन्हें माता-पिता के चर के लिए उपयोग की आवश्यकता है)

किसी भी मदद की सराहना आपको बहुत धन्यवाद!

+0

'प्रदर्शन ए' फ़ंक्शन में, आप "यह" संदर्भित कर रहे हैं और इसकी "ए" विशेषता तक पहुंचने का प्रयास कर रहे हैं। यहां "यह" का आह्वान बाल वस्तु को संदर्भित करता है, न कि माता-पिता। यदि आप एक कन्स्ट्रक्टर का उपयोग करते हैं तो आप अपने माता-पिता के संदर्भ (इस) को बच्चे ऑब्जेक्ट में पास कर सकते हैं। या आप कॉल या बाइंड विधियों का उपयोग कर सकते हैं। – chRyNaN

उत्तर

10

आप call उपयोग कर सकते हैं this का मान सेट करने के लिए:

parent.child.displayA.call(parent); // 5 

तुम भी binding में रुचि हो सकती है यह:

parent.child.displayA = function(){ 
    console.log(this.a); 
}.bind(parent); 
parent.child.displayA(); // 5 

या आप आप सिर्फ parent बजाय this उपयोग कर सकते हैं:

parent.child.displayA = function(){ 
    console.log(parent.a); 
}; 
parent.child.displayA(); // 5 
1

जावास्क्रिप्ट prototype based है, यह PHP या जावा जैसी नियमित ओओपी भाषा नहीं है।

Inheritance and the prototype chain पर एक नज़र डालें और Simple Javascript inheritance जैसे कुछ को लागू करें।

यदि आप वैश्विक दायरे में हैं तो शायद आप window.parent के माध्यम से माता-पिता तक पहुंच सकते हैं, लेकिन आपका उदाहरण हर मामले में काम नहीं करेगा।

0

ऑब्जेक्ट child के लिए कोई सामान्य तरीका नहीं है यह जानने के लिए कि यह मूल वस्तु का सदस्य है। अपनी स्थिति में, आप तो जैसे displayA() में पैरेंट ऑब्जेक्ट के लिए एक सीधा संदर्भ बना सकते हैं,:

displayA : function(){ 
    console.log(parent.a); 
} 

आप वैश्विक क्षेत्र में माता-पिता जगह है और window.parent का उपयोग के रूप में एक और उत्तर पता चलता है की जरूरत नहीं है; चूंकि आप को parent के दायरे में घोषित कर रहे हैं, तो फ़ंक्शन parent से अधिक बंद हो जाएगा, और यह child के भीतर कहीं भी पहुंच योग्य होगा। चूंकि बंद होने में parent ऑब्जेक्ट का संदर्भ होता है, तो आप देखेंगे कि parent में परिवर्तन displayA के व्यवहार में दिखाई देंगे। उदाहरण के लिए, मान लें कि parent और child को आपके उदाहरण के रूप में परिभाषित किया गया है, displayA को parent.a का उपयोग करने के लिए संशोधित किया गया है। तब:

parent.child.displayA(); //=> 5 
parent.a = 10; 
parent.child.displayA(); //=> 10 

यह सब कहा जा रहा है, यदि आप OOP की नकल करने की कोशिश कर रहे हैं, तो अन्य जवाब सही है: आप कैसे जावास्क्रिप्ट प्रोटोटाइप श्रृंखला काम करता है के बारे में अधिक पढ़ना चाहिए।

0

मुझे लगता है कि यह वास्तव में ऐसा करने के लिए संवेदना नहीं करता है क्योंकि आप केवल अपने माता-पिता के माध्यम से बाल वस्तु तक पहुंच सकते हैं। तो बच्चे को मिथोड डिस्प्लेबी क्यों जोड़ें, जबकि आप इसे माता-पिता में जोड़ सकते हैं जिसके पास सभी बाल गुणों तक पहुंच है।

0

आपके उदाहरण में आपके पास विरासत नहीं है। आप इस

... 
    displayA : function(){ 
     console.log(parent.a); 
     // 5 
    }, 
... 
parent.child.parent = parent; 
parent.child.displayA(); 
2

आप super.prop उपयोग कर सकते हैं माता पिता वर्ग गुण का उपयोग करने के लिए क्या कर सकते हैं। बेशक, केवल अगर आप ES6 का उपयोग कर रहे हैं।

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