我遇到有这种模式在许多地方的一些代码:this.someFunction.call的用途是什么(this,param);
this.someFunction.call(this, param);
,但在我看来只是一个打字
this.someFunction(param)
的更详细的方法的模式有时会出现内部作为回调提供的功能。它恰好使用Backbone,以防相关。事情是这样的:
Backbone.View.extend({
// other stuff ...
someFunction: function(param) {
// ...
},
anotherFunction: function() {
this.collection.on("some_event", function() {
this.someFunction.call(this, param);
});
}
});
请问模式实际上有不是this.someFunction(param)
或相当于是有人只是担心关闭不捕获正确this
的影响?
感谢您的任何见解!
*“或者是某人只是紧张的关闭不捕获正确的'this'”*'this'是函数内部的一个特殊值,不受范围的影响。 (例外:ES6箭头功能)。我没有看到在这里比通常的函数调用更喜欢'.call'的原因。 – 2015-03-18 22:38:23
两者都可能是某种编码惯例。 脚本也经常被混淆。 – kidwon 2015-03-18 22:42:32
请注意,使用call()会增加一些开销并降低执行速度,这在循环中尤其明显。代码实际上可以写为:this.collection.on(“some_event”,this.someFunction.bind(this,param));'它提前锁定_this_,可以比call()更快。尽管取决于骨干如何使用_this_,您可能需要在另一个函数()中复制绑定值以在当时拥有正确的_this_。 – dandavis 2015-03-18 22:52:37