【发布时间】:2013-10-01 21:45:50
【问题描述】:
我已经编写了一些代码来向页面添加一个按钮:
var myButt = document.createElement('button');
myButt.onclick = window.location.reload;
myButt.innerText = 'Reload';
document.body.appendChild(myButt);
但是它会抛出一个错误:
TypeError:类型错误
将其包装在一个函数中可以解决问题:
myButt.onclick = function(){ window.location.reload(); };
但我的问题是为什么前者不起作用?
执行air.trace(typeof(window.location.reload)); 输出function。
来自高级用户的An answer 建议它应该是可能的。肯定更简洁。
我正在运行 Adobe AIR 3.6(运行 Webkit),如果这有影响的话。
【问题讨论】:
-
“单独使用
window.location.reload不起作用,因为在执行侦听器时,该函数中this的值被设置为它正在侦听的对象”。 stackoverflow.com/questions/7213369/… -
函数只是一个函数和一个认为它是一个方法的函数之间存在细微的差别。区别在于
this和this的值(通常)取决于函数的调用方式。 @KevinBeal:您可能希望将该评论扩展为答案。 -
@KevinBeal 将我的代码更改为
myButt.onclick = window.location.reload.bind(window.location);现在会引发此错误:TypeError: instanceof 在具有无效原型属性的对象上调用(使用the MDNbindcompatibility function) -
如果您仔细查看您所指的高级用户的代码,您会发现情况并非如此。该人的代码有
el.onclick = forgotpass;。请注意,forgotpass本身是一个函数。
标签: javascript air webkit