2013-02-25 60 views
7

क्या कोई समझा सकता है कि मुझे स्वयं के अलग-अलग मूल्य क्यों मिलते हैं? जहां स्वयं इसका संदर्भ है।जावास्क्रिप्ट: स्वयं और यह

function Parent(){ 
    var self = this; 
    this.func = function(){ 
     // self.a is undefined 
     // this.a is 'Test' 
     console.log(self.a, this.a); 
    } 
} 

function Child(x){ 
    this.a = x; 
} 

Child.prototype.__proto__ = new Parent; 
var ch = new Child('Test'); 
ch.func(); 

मैं प्रोजेक्ट पर स्वयं का उपयोग कर रहा हूं और यह मेरा पहला समय है।

+0

स्वयं और अब यह एक ही वस्तु की चर्चा करते हुए कर रहे हैं। निम्न लिंक उपयोगी हो सकता है: http://stackoverflow.com/questions/962033/what-underlies- यह- जावास्क्रिप्ट-idiom-var-self- यह –

+0

जावास्क्रिप्ट कॉल संदर्भ का आनंद! – benzonico

+0

'func' में, यह 'माता-पिता' के लिए 'स्वयं' बिंदु जैसा प्रतीत होता है, लेकिन यह 'चाइल्ड' को इंगित करता है। – Blender

उत्तर

9

ऐसा इसलिए है क्योंकि selfParent के उदाहरण को संदर्भित करता है, लेकिन Child के उदाहरणों में a संपत्ति है।

function Parent(){ 
    var self = this; // this is an instance of Parent 
    this.func = function(){ 
     console.log(self.a, this.a); 
    } 
} 

function Child(x){ 
    this.a = x; // Instances of Child have an `a` property 
} 

Child.prototype.__proto__ = new Parent; 
var ch = new Child('Test'); 

ch.func(); // Method called in context of instance of Child 

तो जब आप Child का एक उदाहरण पर func फोन, this कि उदाहरण के लिए संदर्भित करता है। यही कारण है कि this.a आपको func के अंदर सही मूल्य देता है।

1

func, thisChild के उदाहरण को संदर्भित करता है।

Child.prototype.__proto__ = new Parent; 

Child के प्रोटोटाइप Parent का एक उदाहरण के लिए सेट है। तो जब ch.func() शुरू हो जाती है, func()Child के प्रोटोटाइप श्रृंखला पर है, लेकिन ch के संदर्भ जो Child

self का एक उदाहरण है में शुरू हो जाती है अभी भी Parent का उदाहरण है, जिसमें एक विशेषता a

नहीं है करने के लिए बात कर रहा है

बेहतर तरीके से समझने के लिए:

var p = new Parent(); 

// this.a is undefined because this is an instance of Parent 
p.func(); // undefined undefined