对我来说,下面的代码做同样的事情,但我不完全确定,所以我想确定:
var self = this;
this.param = 5;
var listener = sub.on('change', function() {
self.param = 10;
});
与?相同:
this.param = 5;
var listener = sub.on('change', function() {
this.param = 10;
}.bind(this));
答案 0 :(得分:2)
他们不是相同的,但是为了您的目的,您发布的内容非常接近,因为您可以获得相同的效果。目标是在实际调用处理程序后,在事件处理程序之外引用this
外部的值。这两种选择都有这种效果。
.bind()
函数做了一些其他的事情,在这样的简单情况下不会有任何区别。
编辑 - 并且肯定会注意到@deceze在他的回答中发布的修复。
以下是两者不同的示例:如果要更改self
变量,则事件处理程序的行为会有所不同。您可能不太可能更改它,但这是一种可能性(可能会引入错误)。使用.bind()
,您将获得一个真正无法更改的功能;没有什么可以覆盖你以这种方式设置的绑定。
答案 1 :(得分:1)
应该是:
sub.on('change', function() {
this.param = 10;
}.bind(this))
^
misplaced parenthesis
您希望为回调函数绑定this
,而不是on()
。如果您解决了这个问题,结果将与您的目的相同。
答案 2 :(得分:1)
请同时考虑两种方式(实际上是3种方式)都有显着的效果。
查看https://jsperf.com/bind-vs-self-closure/17
执行封闭引用似乎比绑定上下文更快(实际上是100倍)。