2017-05-01 12 views
5

के अंदर अपरिभाषित है, मैं कुछ टाइपस्क्रिप्ट कोड लिख रहा हूं और एक सरणी को फिर से लिख रहा हूं। पाश के अंदर, मैं का उपयोग करने के लिए 'इस' वस्तु के रूप में कुछ प्रसंस्करण करने के लिए कोशिश कर रहा हूँ:'यह' फ़ोरैच लूप

console.log('before iterate, this = ' +this); 
myarray.days.forEach(function(obj, index) { 
    console.log('before transform, this : ' + this); 
    this.datePipe.transform... 
}); 

लेकिन यह, विफल रहता है के रूप में यह शिकायत है कि 'इस' [वस्तु वस्तु के रूप में 'इस' वस्तु प्रिंट सही ढंग से अपरिभाषित है ] लूप के पहले/बाहर, लेकिन लूप के अंदर, यह अनिर्धारित है। ऐसा क्यों है? और इसके लिए क्या तय है?

उत्तर

16

आप या तो एक arrow function उपयोग करने की आवश्यकता:

myarray.days.forEach((obj, index) => { 
    console.log('before transform, this : ' + this); 
    this.datePipe.transform... 
}); 

या का उपयोग bind method:

myarray.days.forEach(function(obj, index) { 
    console.log('before transform, this : ' + this); 
    this.datePipe.transform... 
}.bind(this)); 

कारण है कि जब एक कॉलबैक, के रूप में एक नियमित रूप से समारोह गुजर जब यह this शुरू हो जाती है वास्तव में संरक्षित नहीं है।
ऊपर दिए गए दो तरीकों से यह सुनिश्चित हो जाएगा कि सही this स्कोप फ़ंक्शन के भविष्य के निष्पादन के लिए संरक्षित है।

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