DOJO官方API翻譯或解讀-dojo/_base/lang --hitch()


hitch()

hitch() 是一個函數,會在給定的上下中執行給定一個執行函數。hitch允許你去控制一個函數如何執行,往往在異步操作中起作用。

我們常常會寫出這樣的代碼:(博主:這個代碼意圖在"click"事件觸發時,執行此時定義的"processEvent"。)

1 require(["dojo/on"], function(on){
2     var processEvent = function(e){
3         this.something = "else";
4     };
5     on(something, "click", processEvent);
6 });

它錯誤的原因是關於一個無法解析的變量。原因是,像上文這種異步回調函數的應用場景,當代碼正在執行時,上下文會發生變化。執行上下文環境已經不再是最初提供的對象,而指向了外部對象(on的回調函數),為了解決這個問題,你可以使用hitch()去強制processEvent在此時“this”指向的上下文來執行。如下:

1 require(["dojo/on", "dojo/_base/lang"], function(on, lang){
2 
3   var processEvent = function(e){
4     this.something = "else";
5   };
6 
7   on(something, "click", lang.hitch(this, processEvent));
8 
9 });

(博主,這種因執行上下文發生變化而導致的問題,可以用hitch()解決,用到this的時候,要注意分析是否會因為執行上下文變化,而出現錯誤了。)

例子:

一個簡單的例子:

 1 require(["dojo/_base/lang"], function(lang){
 2   var myObj = {
 3     foo: "bar"
 4   };
 5 
 6   var func = lang.hitch(myObj, function(){
 7     console.log(this.foo);
 8   });
 9 
10   func();
11 });

上面的得嗎,bar 會被成功打印。所以在執行函數console.log(this.foo)時,this指向的是 myobj。

當調用函數,是給定執行上下文的方法時,可以用方法命傳參的方式,如下:

 1 require(["dojo/_base/lang"], function(lang){
 2   var myObj = {
 3     foo: "bar",
 4     method: function(someArg){
 5       console.log(this.foo);
 6     }
 7   };
 8 
 9   var func = lang.hitch(myObj, "method");
10 
11   func();
12 });

同時,函數執行若需要參數,如下:

 1 require(["dojo/_base/lang"], function(lang){
 2   var myObj = {
 3     foo: "bar",
 4     method: function(someArg){
 5       console.log(someArg + " " + this.foo);
 6     }
 7   };
 8 
 9   var func = lang.hitch(myObj, "method", "baz");
10 
11   func();
12 });

上述代碼會打印: baz bar 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM