首页 > 代码库 > DOJO官方API翻译或解读-dojo/_base/lang --hitch()
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()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。