当前位置:  开发笔记 > 编程语言 > 正文

用"this"调用函数

如何解决《用"this"调用函数》经验,为你挑选了2个好方法。

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

function handleOnClick() {
    if(confirm("Are you sure?")) {
        return handleOnClickConfirmed();
    }
    return false;
}

通过此函数,可以在单击元素时访问对象.但是,handleOnClickConfirmed 是一个Window元素!我想handleOnClickConfirmed具有相同的是handleOnClick一样.我该怎么做?

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



1> Rob..:

以下应该这样做:

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

call()附加到Function对象的功能旨在允许这样做; 调用具有所需上下文的函数.在设置调用其他对象中的函数的事件处理程序时,这是一个非常有用的技巧.



2> Benry..:

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
}

同样,在这种特殊情况下,呼叫功能是最佳解决方案.但是我在上面概述的技术在您的工具箱中是一个很好的技术.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有