为什么window.location.reload需要包装在function(){}中?

时间:2013-09-26 04:39:45

标签: javascript air webkit

我写了一些代码来为页面添加一个按钮:

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),如果这有所不同。

1 个答案:

答案 0 :(得分:2)

使用它时this值不正确。
当您需要this myButt时,window.location原来是this

要修复此(hehe),请按照您的方式将其换行,或者将新的myButt.onclick = window.location.reload.bind(window.location); 值绑定到它:

Function.prototype.bind

我刚测试过,它适用于Firefox 23.0.1。




为了将来参考,他使用了fNOP.prototype = this.prototype || {}; 找到的window.location.reload兼容性代码。

使用上面的代码,他收到了错误

  

TypeError:在具有无效原型的对象上调用instanceof   属性

要解决此问题,我将该兼容性代码的第18行更改为以下内容:

{{1}}

这样原型被设置为空白对象,因为{{1}}自然没有原型。