DOJO官方API翻译或解读-dojo/_base/lang --hitch()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 

以上是关于DOJO官方API翻译或解读-dojo/_base/lang --hitch()的主要内容,如果未能解决你的问题,请参考以下文章

Dojo1.11官方教程文档翻译(1.3)新的Dojo

Dojo API中文 Dojo内容模块概览,初学者

dojo/_base/lang源码分析

arcgis自定义infowindow

wl 6.1 中的 worklight apk 中缺少 dojo/_base/*js

Hello Dojo!(翻译)