2016-12-05 9 views
7

इस code snippet में, यह क्यों है this.identifier काम नहीं करता है लेकिन _self.url काम करता है?जावास्क्रिप्ट/टाइपस्क्रिप्ट में "let _self = this" का क्या अर्थ है?

getConfig() { 
    let _self = this; 
    return function() { 
     this.page.url = this.url || window.location.href; 
     this.page.identifier = _self.identifier; 
     this.page.category_id = this.categoryId; 
     this.language = this.lang; 
    }; 
} 

तो let _self = this वास्तव में क्या करता है?

+1

संभावित डुप्लिकेट [यह "कीवर्ड" कैसे काम करता है?] (http://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work) – toskv

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let – naththedeveloper

+3

संभावित डुप्लिकेट [इस जावास्क्रिप्ट idiom क्या है: var self = this?] (Http://stackoverflow.com/ प्रश्न/962,033/क्या-underlies-यह-जावास्क्रिप्ट-मुहावरा-वर-स्वयं इस) – JJJ

उत्तर

2

यह एक चर में this का मान (जो how the function is called से निर्धारित होता है) और यह भंडार लेता है (जो अभी भी बंद में पहुँचा जा सकता है (कि जब यह कहा जाता है this का एक अलग मूल्य होगा) कि getConfig लौटा रहा है) ।

10

सबसे पहले, आप एक वोट प्राप्त करते हैं क्योंकि यह एक मूर्ख सवाल नहीं है। स्टैक ओवरफ्लो पर कुछ लोग हकदार हैं।

कार्यों में कुछ संदर्भ कहा जाता है। एक संदर्भ वह वस्तु है जिस पर फ़ंक्शन को बुलाया जा रहा है।

let person = { 
    name:"bill", 
    speak:function(){ 
     console.log("hi i am "+this.name) 
    } 
} 

अगर आप person.speak करने के लिए थे()

यह उद्देश्य यह है कि परिभाषित किया गया था पर बुलाया जाएगा। चर person इसलिए जब आप यह कहते हैं संदर्भ

है। यह व्यक्ति कहने जैसा ही है। नाम

अब आप फ़ंक्शन को किसी और चीज़ से जोड़ सकते हैं।

var newperson = {name:'jill'} 
newperson.speak = person.speak; 

यह प्रिंट करेगा हाय जब मैं इसे कॉल करता हूं तो मैं जिल हूं।

इसे पहले समझें।

अब दो कदम पर।

GetConfig एक फ़ंक्शन देता है, हालांकि यह फ़ंक्शन किसी ऑब्जेक्ट को संलग्न नहीं करता है।

इसे देखें।

let person = { 
    name:"bill", 
    getSpeakFunction:function(){ 
     return function(){ 
     console.log('hi my name is '+this.name) 
     } 

    } 
} 


let func = person.getSpeakFunction() 

अब फ़ंक्शन func स्वयं ही है।

अब जब यह कहा जाता है कि "यह" कौन है जिसके बारे में आप बात कर रहे हैं। फ़ंक्शन सोच रहा है।

तो हम कहकर कार्य करने में मदद कर सकते हैं।

let person = { 
    name:"bill", 
    getSpeakFunction:function(){ 
     let context = this; //listen hear function this is what i am talking about 
     return function(){ 
     console.log('hi my name is '+context.name) 
     } 

    } 
} 


let func = person.getSpeakFunction() 

इस खास है भाषा इस का मूल्य तय करता है, फिर भी संदर्भ नहीं है। संदर्भ जो कुछ भी सौंपा जाएगा, वह संदर्भ होगा। जब तक आप प्रोग्रामर इसे बदल नहीं लेता तब तक यह तब तक नहीं बदलेगा।

तो शब्द का उपयोग कर _self, संदर्भ, $ बाकी जब आप इसे करने के लिए इस का मूल्य निर्दिष्ट इस या कुछ भी। यह किसी भी अन्य नियमित चर की तरह 'जगह में बंद' है।

let a = 2; 
//this will never change 

let _self = this //_self will never change as it's your variable 

अब जब आप अपना फ़ंक्शन कॉल करते हैं और यह स्वयं की तलाश करता है।यह बिल्कुल जानता है कि आप किस बारे में बात कर रहे हैं।

ps। मैं वोट भी मांग रहा हूं;)

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