jQuery $ .proxy vs var self - 保留`this`上下文的常用方法

时间:2013-03-08 13:36:47

标签: jquery

保留this上下文的常用方法是什么? 什么更快?你更喜欢什么?

  1. $。代理(...)

    $('a').on('click', $.proxy(function() {
        this.close();
    }, this));
    
  2. var self

    var self = this;
    
    $('a').on('click', function() {
        self.close();
    });
    

3 个答案:

答案 0 :(得分:2)

让我们从修复代码开始吧。您有一个无用的函数声明,您可以使用$.proxy作为

$('a').on('click', $.proxy(this.close, this));

现在,第二个解决方案基于self

  • 只需要基本的javascript知识
  • 不需要jQuery
  • 更具可读性,尤其是当您经常重复使用self变量
  • 快得多

这可能是它更常用的原因。

请注意,当您不必与IE8兼容时,您可以使用bind

$('a').on('click', this.close.bind(this));

答案 1 :(得分:1)

两者都很常见。

这种情况下的速度无关紧要。用户不会注意到在0.01毫秒后是否开始点击回调。或0.1毫秒。

对于罕见的重要场合,我希望变量方法稍快一点,但你必须对它进行基准测试。

我个人的偏好会有所不同,具体取决于它的使用位置以及回调中的代码。变量方法的一个优点是它适用于嵌套回调,而无需将其重新应用到每个级别。

答案 2 :(得分:0)

选择第一个。不需要额外的变量。