4

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

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

一位高级用户的回答表明这应该是可能的。它肯定更简洁。

我正在运行 Adob​​e AIR 3.6(运行 Webkit),如果这有所作为的话。

4

1 回答 1

2

像这样使用它时该this值不正确。
this原来是myButt你需要的时候window.location

要解决此问题(hehe),请按照您的做法将其包装起来,或者将新this值绑定到它:

myButt.onclick = window.location.reload.bind(window.location);

我刚刚测试过,它可以在 Firefox 23.0.1 上运行。




为了将来参考,他正在使用此处Function.prototype.bind找到的兼容性代码。

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

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

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

fNOP.prototype = this.prototype || {};

这是为了将原型设置为空白对象,因为window.location.reload自然没有原型。

于 2013-09-26T04:59:49.240 回答