2011-06-09 32 views
6

में ऑब्जेक्ट संदर्भ अंततः मैं यह जानने के लिए उत्सुक हूं कि क्यों जावास्क्रिप्ट सीखने के लिए अपने वूडू जादू करता है क्यों सभी ऑब्जेक्ट संदर्भ समान नहीं होते हैं।यह क्यों काम करता है? जावास्क्रिप्ट

उदाहरण को देखते हुए:

var a, b, c, d; 
a = 100; b = a; 

c = {}; d = c; 

b = 10; d.e = 'f'; 

console.log(a, b); // outputs 100, 10 
console.log(c, d); // outputs object => e = 'f', object => e = 'f' 

सभी चर जावास्क्रिप्ट में वस्तुओं रहे हैं, तो क्या c और एक Objecta और bNumber के रूप में परिभाषित करने की तुलना में बहुत अलग रूप में d डाली स्पष्ट रूप के साथ प्रयोग के मामले बनाता है? या, c और d एक दूसरे से क्यों जुड़ेंगे, और a और b क्यों नहीं होंगे?

उत्तर

8

जावास्क्रिप्ट में सभी चर ऑब्जेक्ट्स नहीं हैं। देशी प्रकार भी हैं।

c और d एक दूसरे से जुड़े नहीं हैं। वे एक ही ऑब्जेक्ट संदर्भ को इंगित कर रहे हैं। अगर आपको किसी अन्य चीज़ पर d पुन: असाइन करना था, तो यह c को प्रभावित नहीं करेगा।

var c = {}; 
var d = c; 
d = { foo: "bar" }; 

c === d // false 

हालांकि, अगर आप को संशोधित करने वस्तु c या d द्वारा संदर्भित किया जा रहा है, तो वह एक ही वस्तु के बाद से c और d दोनों अपने उदाहरण के रूप में एक ही वस्तु की बात कर रहे संशोधित करेगा।

+0

इससे इसे बहुत अधिक समझ में आता है। धन्यवाद! – buzzedword

3

यह मेरे लिए लग रहा है कि अंतर b साथ है, तो आप एक नई वस्तु/मूल्य चर फिर नियत है, जबकि d के साथ, आप रहे मौजूदा ऑब्जेक्ट को संशोधित कर रहे हैं।

+0

तो क्या तुम हो तो कह रहे हैं, कि (अनुराग ने बताया के रूप में), परोक्ष एक 'new' वस्तु पैदा करेगा एक मूल निवासी प्रकार का उपयोग अन्य चर करने के लिए वस्तु फिर नियत बस जब तक कि एक reference-- बनाता है, जबकि 'नया' कीवर्ड स्पष्ट रूप से उपयोग किया जाता है? – buzzedword

+0

यह कड़ाई से सही नहीं है। 'ए' और' बी' को आवंटित मान * ऑब्जेक्ट्स नहीं हैं। – lawnsea

+0

@Buzzedword: ऐसा कुछ। – JAB

2

a का मान b को सौंपा गया है एक संख्या है। c से d पर असाइन किया गया मान किसी ऑब्जेक्ट का संदर्भ है।

var a, b, c, d; 
a = 100; // a has value 100, a number 
b = a; // b has value 100, a number 

c = {}; // c has value p, a reference to some object P 
d = c; // d has value p, a reference to P 

b = 10; // b has value 10, a number 
d.e = 'f'; // P.e has value 'f', a string 
संबंधित मुद्दे