Javascript 用“调用函数”;这";

Javascript 用“调用函数”;这";,javascript,Javascript,我有一个元素的onclick处理程序(实际上,它是jQuery创建的处理程序,但这并不重要)。看起来是这样的: function handleOnClick() { if(confirm("Are you sure?")) { return handleOnClickConfirmed(); } return false; } 通过此函数,单击元素时可以访问此对象。但是,handleon的这是一个窗口元素!我希望HandleonClickConfirma

我有一个元素的onclick处理程序(实际上,它是jQuery创建的处理程序,但这并不重要)。看起来是这样的:

function handleOnClick() {
    if(confirm("Are you sure?")) {
        return handleOnClickConfirmed();
    }
    return false;
}
通过此函数,单击元素时可以访问对象。但是,handleon的这是一个窗口元素!我希望HandleonClickConfirmation具有与handleOnClick相同的。我该怎么做


(我知道我可以将这个作为参数传递给handleOnClickConfirm,但是我的一些代码已经使用了handleOnClickConfirm,我不想重写这些调用。此外,我认为使用这个看起来更干净。)

下面应该这样做:

function handleOnClick() {
    if( confirm( "Sure?" ) ) {
        return handleOnClickConfirmed.call( this );
    }
    return false;
}

附加到
函数
对象的函数设计为允许此操作;使用所需上下文调用函数。设置事件处理程序调用其他对象中的函数时,这是一个非常有用的技巧。

Rob的答案是解决您问题的最佳答案,但我想解决您在原始问题中写的一些问题:

我知道我可以把它作为一个参数传递给handleonclickconfirm,但是我的一些代码已经使用了handleonclickconfirm,我不想重写那些调用

就解释器而言,JavaScript参数始终是可选的。例如,如果您具有以下功能:

function MyFunction(paramA, paraB) {
  // do nothing
}
所有这些调用都将正确执行:

MyFunction(1,2);
MyFunction(1);
MyFunction();
所以您可以修改handleonclickconfirm以接受本质上是可选参数的内容。像这样:

function handleOnClickConfirmed(context) {
  context = context || this;
  // use context instead of 'this' through the rest of your code
}

同样,在这种特殊情况下,调用函数是最好的解决方案。但是,我上面概述的技术是您工具箱中的一项很好的技术。

非常感谢。=]我在想这件事。打电话(fn),但我想我把订单换了。