我想了解call()方法是如何工作的。我有以下我在Firebug Javascript控制檯中執行的代碼片段。Javascript調用()方法不產生預期的輸出
代碼:
var window = {num1: 10, num2: 20};
var o = {num1: 20, num2: 30};
var sum = function(num1, num2) {
return this.num1 + this.num2;
};
console.log(sum.call(o)); // 50
console.log(sum.call(window)); // 30
console.log(sum.call(this)); // 30
輸出:
50
NaN
NaN
我期望的輸出爲50和30分別。當window/this對象作爲執行上下文傳遞時,爲什麼call()會返回NaN?
'window'是瀏覽器中的保留字。您無法用變量覆蓋或隱藏它。 –
而'this'指的是全局命名空間,它顯然沒有num1或num2成員。 –
那麼,你可以用一個局部變量來遮蔽它 - '(function(){var window = {}; console.log(window)}());' - 但是當然你不能完全覆蓋它,你可以仍然可以通過執行類似'top.window'的方式在閉包中訪問它。 – Adam