2009-02-21 105 views
0

,如果我有:JavaScript的指針功能

function init(t,y,u) 
{ 
    alert(t + " " + y + " " + u); 
} 

// String.prototype.add = init(5, 6, 7); // 1) 
// window.onload = init(5,6,7); // 2) 

在1)init將被執行,然後將其指針assegned到String.prototype.add 但2)函數只執行一次......但爲什麼沒有兩次 當onload事件引發?

由於

回答

3

這是你的代碼會發生什麼:

  • 定義一個名爲INIT與當該功能將被驚動三個參數功能調用。
  • 使用參數5,6,7調用函數init(將彈出警告)並將結果(未定義)分配給String.prototype.add
  • 使用參數5,6,7調用函數init(警報將彈出),然後將結果(不確定),以在window.onload

如果上面的代碼被執行被解僱window.onload事件之前,因爲它被設置爲undefined什麼都不會當它被髮射發生。

8
在1

)init將被執行,然後將其指針assegned到String.prototype.add

沒有也不會。該功能將被簡單地執行,其返回值(undefined)將被分配給String.prototype.add。沒有函數指針將被分配。要做到這一點,你需要返回一個功能!

function init(t,y,u) { 
    alert(t + " " + y + " " + u); 
    return function() { alert('function call!'); }; 
} 
+0

返回自身:return arguments.callee; – some 2009-02-21 12:27:31

5

你可能想是這樣的:

String.prototype.add = function() { init(5, 6, 7); }; 
+0

他問過代碼嗎? – 2009-02-21 12:33:19