推理&用例JavaScript bind()函数?

时间:2015-10-11 18:31:24

标签: javascript

在探索一些新的JavaScript时,我想知道JavaScript bind函数背后的原因是什么。

我理解它的作用(传递this的上下文),但我真的不知道何时使用它?

我试图浏览一些项目并找到bind可以使事情变得更优雅的部分,但唯一远远接近的是这一部分(backbone.js代码):

var AlbumListView = Backbone.View.extend({
    initialize: function() {
        var albums = new AlbumCollection();

        this.listenTo(albums, 'fetched-okay', function() { 
            console.log('fetch success, kick things off!');
        });

        albums.fetch({
            success: function() {
                this.trigger('fetched-okay');
            }.bind(albums),
        });
    },
});

如果没有bind,对fetch的调用将如下所示:

albums.fetch({
    success: function() {
        albums.trigger('fetched-okay');
    },
});

我认为可以说第一个例子可能比第二个例子更容易理解,虽然我不相信它; - )

那么绑定函数的一些实际用例是什么 - 对我来说它似乎是一个真正特殊的利基函数。

1 个答案:

答案 0 :(得分:0)

是的,如果您已经有一个可以在函数中使用的albums变量,则没有理由使用bind

然而,bind非常有用a)如果你想要bind(this) b)要绑定的函数确实使用this而你无法做任何事情。

所以,而

function() {
    this.trigger('fetched-okay');
}.bind(albums)

几乎没用,可以简单地用

代替
albums.trigger.bind(albums, 'fetched-okay');

trigger方法本身直接绑定,我们根本不使用任何函数表达式。