我已經寫了一些代碼,一個按鈕添加到頁面:爲什麼window.location.reload需要封裝在一個函數(){}中?
var myButt = document.createElement('button');
myButt.onclick = window.location.reload;
myButt.innerText = 'Reload';
document.body.appendChild(myButt);
但它拋出一個錯誤:
TypeError: Type error
的函數進行包裝,解決了這個問題:
myButt.onclick = function(){ window.location.reload(); };
但我的問題是爲什麼前者不起作用?
執行air.trace(typeof(window.location.reload));
輸出function
。
An answer來自高級代表用戶表示應該有可能。這絕對更簡潔。
我正在運行Adobe AIR 3.6(它運行Webkit),如果這有所作爲。
「單獨使用'window.location.reload'不起作用,因爲當一個監聽器被執行時,該函數中this的值被設置爲它正在監聽的對象。 http://stackoverflow.com/questions/7213369/uncaught-typeerror-illegal-invocation-on-addeventlistener –
函數只是一個函數和函數認爲它是一種方法之間存在細微的差異。不同之處在於'this'和'this'的值(通常)取決於函數的調用方式。 @KevinBeal:您可能想將該評論擴展爲答案。 –
@KevinBeal將我的代碼更改爲'myButt.onclick = window.location.reload.bind(window。位置);'現在拋出這個錯誤:* TypeError:在具有無效原型屬性的對象上調用instanceof *(使用[MDN'bind'兼容性函數](https://developer.mozilla.org/en-US/docs)/Web/JavaScript/Reference/Global_Objects/Function/bind#Compatibility)) –