繁体   English   中英

了解道场搭便车

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM