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是继承的功能.callFunction.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 ,则会出现错误

链接地址: http://www.djcxy.com/p/25239.html

上一篇: What is the purpose of this.someFunction.call(this, param);

下一篇: Unicode character with subscript