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.someFunction(param)
?
不,他们确实是一样的。 假设this.someFunction
是继承的功能.call
从Function.prototype
(但是这是吹毛求疵)。
看起来好像有人缩手缩脚,或代码是遗迹的东西,并没有使用this
的两倍。 或者,也许作者意识到this
回调问题,但未能正确处理它。
我没有看到任何理由在您提供的代码中使用这种函数调用方式。 这里最好使用直接函数调用(如果你不需要修改参数)
this.collection.on("some_event", this.someFunction, this);
要么
this.collection.on("some_event", function() {
this.someFunction(//some modified args)
}, this);
让我提供正确使用.call
的例子。 当然,你已经看到了这一点:
Array.prototype.slice.call(arguments, 2);
由于arguments
不是数组,我们可以'借用'数组方法来操作arguments
。 如果您尝试在arguments
上调用slice
,则会出现错误
上一篇: What is the purpose of this.someFunction.call(this, param);