保存上下文的常用方法是this
什么?什么更快?你更喜欢什么?
$.proxy(...)
$('a').on('click', $.proxy(function() { this.close(); }, this));
自变量
var self = this; $('a').on('click', function() { self.close(); });
保存上下文的常用方法是this
什么?什么更快?你更喜欢什么?
$.proxy(...)
$('a').on('click', $.proxy(function() {
this.close();
}, this));
自变量
var self = this;
$('a').on('click', function() {
self.close();
});
让我们从修复您的代码开始。你有一个无用的函数声明,你可以使用$.proxy
as
$('a').on('click', $.proxy(this.close, this));
现在,第二个解决方案基于self
self
变量时这可能是它被更多使用的原因。
请注意,当您不必与 IE8 兼容时,您可以使用bind:
$('a').on('click', this.close.bind(this));
两者都很常见。
这种情况下的速度无关紧要。如果点击的回调在 0.01 毫秒后开始,用户将不会注意到。或 0.1 毫秒。
对于重要的罕见情况,我希望变量方法稍微快一些,但您必须对其进行基准测试。
我的个人偏好会有所不同,具体取决于它的使用位置以及回调中的代码的作用。变量方法的一个优点是它适用于嵌套回调,而无需将其重新应用于每个级别。
选择第一个。不需要额外的变量。