2015-02-24 55 views
2

下面的代碼如何起作用?調用存儲在對象屬性中的Javascript函數

var x = {}; 
x.a = alert; 
x.a('asdf'); // TypeError: Illegal invocation 
+2

警報函數需要調用上下文爲'window',因此它不能被調用不同的上下文 – adeneo 2015-02-24 10:52:04

+0

http://stackoverflow.com/questions/10743596/why-are-certain-function-calls-termed -illegal-invocations-in-javascript – 2015-02-24 10:53:04

+0

同意重複,但我相信我的例子更清晰,答案更易於閱讀和理解。 (我「知道」這個q已經發布,但沒有找到它) – LosManos 2015-02-24 11:11:37

回答

2

由於alert功能的內部需要的this值是window

x.a.call(window,'asdf'); 

...將工作。

+2

它看起來像'window'也可以用'null'替換(!) – LosManos 2015-02-24 11:00:42

+0

你能解釋一下嗎? – Manwal 2015-02-24 11:07:04

+1

'x.a.call(null,'asdf');'工作。 – LosManos 2015-02-24 11:12:36

相關問題