5

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

  1. $.proxy(...)

    $('a').on('click', $.proxy(function() {
        this.close();
    }, this));
    
  2. 自变量

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

3 回答 3

2

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

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

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

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

这可能是它被更多使用的原因。

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

$('a').on('click', this.close.bind(this));
于 2013-03-08T13:38:13.570 回答
1

两者都很常见。

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

对于重要的罕见情况,我希望变量方法稍微快一些,但您必须对其进行基准测试。

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

于 2013-03-08T13:44:34.597 回答
0

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

于 2013-03-08T13:41:39.387 回答