Javascript 理解dojo挂接

Javascript 理解dojo挂接,javascript,dojo,Javascript,Dojo,我正在努力理解dojo工具包的功能。我正在查看的示例如下: 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.me

我正在努力理解dojo工具包的功能。我正在查看的示例如下:

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)
来使用该函数吗

是的,在这种特殊情况下是这样的,但是需要将函数引用传递给其他代码是很常见的,函数引用(默认情况下)不携带任何特定的
这个
通过调用函数的方式进行设置

例如,如果您使用
myObj.method
作为事件处理程序,当调用它时,
this
在调用过程中不会引用myObj
引用的对象

hitch
通过创建一个新函数来修复此问题,该函数在调用时将使用
正确设置的
来调用您的方法

它已经过时一段时间了,ES5(2009年)引入了
函数#bind
,它也做了同样的事情。但是DojoToolkit最初是在2005年创建的,所以它包含了这样的实用程序。下面是使用
函数#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={
福:“酒吧”,
方法:函数(){
console.log(“this.foo=“+this.foo”);
}
};
document.getElementById(“未绑定”).addEventListener(“单击”,obj.method,false);
document.getElementById(“绑定”).addEventListener(“单击”,obj.method.bind(obj),false)


谢谢。我想我开始明白了。我是JavaScript编程新手。之所以需要这样的实用程序是因为JavaScript的异步特性吗?@Naci:No.:-)事实上,JavaScript没有异步特性。JavaScript语言几乎完全是同步的。ES2015中添加了它的第一个(也是目前为止唯一的一个)异步方面(保证对承诺的
then
catch
的回调总是异步调用)。(续)(续)但JS通常用于由异步行为主导的环境:浏览器和NodeJ。但这不是像这样的公用事业的原因,它只是一个平行的事情。例如:您给出的回调
Array#sort
是同步的,但是如果您想为此调用一个对象方法,您需要
bind
,原因与您需要它与事件处理程序(异步)一样。旁注:享受JS之旅吧!这是一种奇妙的语言。现代C#让它为它的钱跑了一圈,但我绝对喜欢JS。谢谢。对我来说真的不一样。我最近做了Java和Matlab,逻辑似乎大不相同。我认为这篇文章也让它更清楚了一点。就我所知,这与对象所在的上下文有关,对吗?