[英]Understanding dojo hitch
我正在努力了解dojo工具箱的挂钩功能。 我正在https://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html上查看此示例,该示例如下:
require(["dojo/_base/lang"], function(lang){
var myObj = {
foo: "bar",
method: function(someArg){
console.log(this.foo);
}
};
var func = lang.hitch(myObj, "method");
func();
});
不能通过myObj.method(arg)来利用该功能吗? 谢谢
myObj.method(arg)
来利用该功能吗?
是的,它是在特定的情况下,但它是很常见的需要传递一个函数引用到其他代码,和函数引用不(默认)进行任何特别的this
烤成他们。 this
取决于您调用函数的方式。
因此,举例来说,如果你使用myObj.method
作为一个事件处理程序,当它被调用, this
在通话期间将不参考对象myObj
表示。
hitch
通过创建一个新函数来修复该问题,该函数在被调用时将正确调用this
设置的方法。
它已经过时了,ES5(在2009年)引入了Function#bind
,它执行相同的功能。 但是Dojo Toolkit最初是在2005年创建的,因此包含了类似的实用程序。 这是使用Function#bind
相同代码:
require(["dojo/_base/lang"], function(lang){
var myObj = {
foo: "bar",
method: function(someArg){
console.log(this.foo);
}
};
var func = myObj.method.bind(myObj);
func();
});
这是一个实时示例,展示了它在事件处理程序中的重要性:
var obj = { foo: "bar", method: function() { console.log("this.foo = " + this.foo); } }; document.getElementById("unbound").addEventListener("click", obj.method, false); document.getElementById("bound").addEventListener("click", obj.method.bind(obj), false);
<input type="button" id="unbound" value="Unbound"> <input type="button" id="bound" value="Bound">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.