2015-09-13 7 views
22

मैं तो फिर दायरे के अंदर एक समारोह कॉल करने के लिए सक्षम होना चाहते हैं अंदर तक पहुँचने के लिए, और उस के लिए मैं this.foo() तरीके का उपयोग करें। लेकिन अगर मैं के अंदर ऐसा करता हूं। तो मुझे एक त्रुटि मिलती है, क्योंकि यह खो जाता प्रतीत होता है। मैं क्या कर सकता हूँ?जावास्क्रिप्ट, वादे, कैसे चर यह एक तो गुंजाइश

इस कोड में, यह वस्तु के लिए एक ही उत्पादन के बराबर होगा इस

console.log(this) 
one().then(function() { 
    console.log(this) 
}) 

function one() { 
    var deferred = $q.defer(); 
    deferred.resolve() 
    return deferred.promise; 
} 

यह न लगता

console.log(this) 
var a = this; 
one().then(function(a) { 
    console.log(a) 
}) 
+2

आप '' एक (से A' तर्क को निकाल देते हैं) तो (समारोह (क) { 'इतना है कि यह' एक() तो (समारोह है() {।। ', तो वह आपको वह परिणाम देगा जो आप चाहते हैं। – Andy

+0

हां, जब मैंने आपका जवाब देखा है तो मैं इसका परीक्षण कर रहा था। आप बिल्कुल सही हैं! अगर आप इसे उत्तर के रूप में पोस्ट करते हैं तो मैं इसे उत्तर के रूप में चिह्नित करूंगा – Gerard

उत्तर

30

आपकी दूसरी कोड उदाहरण काम करने के लिए सही तरीका है जाना। चूंकि नए फ़ंक्शन में दायरा बदलता है, this भी बदलता है, इसलिए आप फ़ंक्शन के बाहर this का संदर्भ देने का अधिकार रखते हैं।

कारण यह विफल रहा क्योंकि यह कार्य a का उपयोग कर रहा है जिसे आपने इसके बाहर परिभाषित वैश्विक a के बजाय फ़ंक्शन में पारित किया है।

दूसरे शब्दों में:

var a = this; 
one().then(function() { 
    console.log(a) 
}); 
+24

या ... 'एक()। (फ़ंक्शन() { console.log (यह) } .बिंद (यह)) '_usual अस्वीकरण कि 9 से पहले इंटरनेट एक्सप्लोरर डिस्क स्पेस का अपशिष्ट है और इसे कभी भी भरोसा नहीं किया जाना चाहिए स्थिर वेब पेजों के अलावा कुछ भी करने के लिए_ –

+2

हाँ, @ जारोमांडाएक्स, मैं जे था उत्तर में किए गए किसी व्यक्ति को संपादित करने पर ध्यान दें और कोड सही नहीं दिख रहा था। आपका सटीक दिखता है। – Andy

+2

आपका अधिकार सही है, और संभवतः कई मामलों में उपयोग करना आसान है, आप केवल यह देखकर जानते हैं कि आपने 'var a = this'' वास्तव में क्या किया है - यह, बाइंड का उपयोग करके, यह बिल्कुल ठीक नहीं हो सकता है उम्मीद है या उस मामले के लिए चाहते हैं: पी –

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