Dojo.hitch()范围问题

时间:2011-08-31 14:16:15

标签: javascript dojo scope

为什么当我使用dojo.hitch函数并尝试在其中引用“this”运算符时,它会让我引用错误的对象?

console.debug(dijit.byId("widgetName"));  //works as expected and prints out the window object

dojo.hitch(dijit.byId("widgetName"), tester())();   //this should be executing the tester function in the scope of the widget object

function tester() {
    console.debug(this);    //prints out the Javascript Window object instead of the widget object!!!!
}

由于

1 个答案:

答案 0 :(得分:6)

根据您刚刚展示的内容,我现在可以安全地提供解释错误的答案。

执行dojo.hitch()时,不应该调用其中的函数,而是调用函数的结果。也就是说,您需要为dojo.hitch提供引用函数的引用,而不是调用该函数的结果。

在您的示例中,您在tester()内调用tester(调用函数dojo.hitch()),该tester调用dojo.hitch()();一次。即使你有tester(),因为tester没有返回函数处理程序(但是undefined的结果,在这种情况下是hitch()();),widget = dijit.byId("widgetName"); tester = function() { console.log(this); } handle = dojo.hitch(widget, tester); handle(); 什么都不做。这可能令人困惑,所以我将向您展示一个例子。

不要这样做:

  

dojo.hitch(context,handler())();

而是这样做:

  

dojo.hitch(context,handler)();

因此,为了使您具有可读性,您可以这样做:

dojo.hitch()

你的错误是试图从{{1}}内调用该函数。您的原始问题中也没有出现此错误。