2009-02-21 52 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