استفاده از تابع در یک متد در جاوا اسکریپت
هر تابعی دارای یک متغیر خاص this مخصوص به خود است. این مناسب نیست که یک تابع را در داخل یک متد قرار دهیم، زیرا نمی توانیم از داخل تابع مورد نظر به کلمه ی کلیدی this متعلق به متد مورد نظر، دسترسی پیدا کنیم. در زیر یک مثال وجود دارد که در آن ما فرمان forEach را به همراه یک تابع که بر روی یک آرایه حلقه می زند مورد استفاده قرار داده ایم:
var jane = {
name: 'Jane',
friends: [ 'Tarzan', 'Cheeta' ],
logHiToFriends: function () {
'use strict';
this.friends.forEach(function (friend) {
// `this` is undefined here
console.log(this.name+' says hi to '+friend);
});
}
}
با فراخوانی متد logHiToFriends یک خطا ایجاد می شود:
> jane.logHiToFriends()
TypeError: Cannot read property 'name' of undefined
اجازه دهید ببینیم که چطور می توانیم این مشکل را حل کنیم. ابتدا ما می توانیم کلمه ی کلیدی this را در یک متغیر متفاوت ذخیره کنیم:
logHiToFriends: function () {
'use strict';
var that = this;
this.friends.forEach(function (friend) {
console.log(that.name+' says hi to '+friend);
});
}
و یا اینکه می توانیم به forEach یک پارامتر دوم بدهیم که به ما امکان می دهد تا یک مقدار را برای کلمه ی کلیدی this مشخص کنیم:
logHiToFriends: function () {
'use strict';
this.friends.forEach(function (friend) {
console.log(this.name+' says hi to '+friend);
}, this);
}
از عبارت های تابعی(Function expressions) اغلب بعنوان آرگومان در فراخوانی تابع ها، در جاوا اسکریپت استفاده می شود. همواره وقتی که می خواهید از یکی از این عبارت های تابعی، به کلمه ی کلیدی this رجوع کنید، مراقب باشید.
- بازدید: 391
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.