为什么当我使用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!!!!
}
由于
答案 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}}内调用该函数。您的原始问题中也没有出现此错误。