我有一个元素的onclick处理程序(实际上,它是一个jQuery创建的处理程序,但这并不重要).它看起来像这样:
function handleOnClick() { if(confirm("Are you sure?")) { return handleOnClickConfirmed(); } return false; }
(我知道我可以将它作为handleOnClickConfirmed的参数传递,但我的一些代码已经使用了handleOnClickConfirmed,我不想重写那些调用.此外,我认为使用它看起来更干净.)
以下应该这样做:
function handleOnClick() { if( confirm( "Sure?" ) ) { return handleOnClickConfirmed.call( this ); } return false; }
call()
附加到Function
对象的功能旨在允许这样做; 调用具有所需上下文的函数.在设置调用其他对象中的函数的事件处理程序时,这是一个非常有用的技巧.
Rob的答案是您问题的最佳答案,但我想解决您在原始问题中所写的内容:
我知道我可以将此作为handleOnClickConfirmed的参数传递,但我的一些代码已经使用handleOnClickConfirmed,我不想重写这些调用.
就解释器而言,JavaScript参数始终是可选的.例如,如果你有这个功能:
function MyFunction(paramA, paraB) { // do nothing }
所有这些调用都将执行而不会出现错误:
MyFunction(1,2); MyFunction(1); MyFunction();
因此,您可以修改handleOnClickConfirmed以接受本质上是可选参数的内容.像这样:
function handleOnClickConfirmed(context) { context = context || this; // use context instead of 'this' through the rest of your code }
同样,在这种特殊情况下,呼叫功能是最佳解决方案.但是我在上面概述的技术在您的工具箱中是一个很好的技术.