در لایبراری دوجو ، در برخی از سمپل ها ، ممکن است با فانکشن یا تابع hitch برخورد کرده باشد.اما کاربرد این متد چیست؟
ابتدا بهتر است بفهمیم که این hitch چه مشکلی را بر طرف میکند.
به مثال زیر توجه کنید
require(["dojo/query", "dojo/domReady!"],
function(query) {
var myObject = {
foo: "bar",
myHandler: function(evt){
alert("The value of 'foo' is " + this.foo);
}
};
// later on in the script:
query(".myNodes").forEach(function(node){
node.onclick = myObject.myHandler;
});
});
یک آبجک داریم به نام myObject ( دقت کنید که آبجکت در جاوا اسکریپت در واقع یک function میباشد).
این آبجک دارای یک متد به نام myHandler و یک متغیر به نام foo میباشد.
اما این قسمت
query(".myNodes").forEach(function(node){
node.onclick = myObject.myHandler;
});
تو این قسمت هر Element ای که دارای css کلاسی به نام myNodes باشه رو پیدا میکنه و اگر روی هر کدوم از این element های HTML کلیک کنیم ، myHandler رو صدا میزنه.
دقت کنید که myHandler ، تو آبکت myObject تعریف شده..و داخل myHandler قراره یه alert به نمایش در بیاد..دقت کنید داخل myHandler ، ما چنین چیزی رو تعریف کریم
alert("The value of 'foo' is " + this.foo);
خوب ما انتظار داریم که مقدار "The value of 'foo' is bar" رو نمایش بده..اما این طور نیست..چیزی که ما خوایم دید =" The value of 'foo' is undefined ".
اما چرا؟؟ چرا undefined ؟ مگه نباید به جای this.foo ، مقدار "bar" رو نشون بده؟؟
اینجاست که بحث execution context مطرح میشه.
ببنین درسته که تو خود آبجکت myObject ، this.foo داره به متغیر foo ، تو این متد اشاره میکنه ...اما باید این نکته رو هم در نظر بگیرین که myHandler داره کجا اجرا میشه..
بله myHandler داره روی element های html اجرا میشه که چیزی به نام foo ندارد.. پس خروجی The value of 'foo' is undefined درسته.
فانکشن lang.hitch این مشکل رو حل میکنه.
این متد تو ماژول ["dojo/_base/lang"] تعریف شده و در واقع میتونیم با این متد بگیم که this باید به چی اشاره کنه .
اگر مایل باشین میتونین یکم در باره scop و execution context تحقیق کنید .مفهوم بیشتر جا میوفته براتون... اما در همین حد هم بدونین که چنین مشکلاتی رو حل میکنه.
lang.hitch(myObject, myObject.myHandler)
در واقع this رو برای اجرا مشخص میکنه.
امید وارم بدردتون بخوره و تو پروژه ها بتونین استفاده کنین.
در پناه خدا باشین