推理,JavaScript bind()函数的用例

Reasoning & use cases for JavaScript bind() function?

本文关键字:函数 JavaScript bind 推理      更新时间:2023-09-26

在探索一些新的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');
    },
});

我认为有人可能会认为第一个例子可能比第二个例子更容易理解,尽管我不相信它;-)

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

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

然而,bind是有用的a)当你想要bind(this) b)当函数绑定使用this,你不能做任何关于它。

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

几乎没什么用,可以用

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

,其中trigger方法本身是直接绑定的,并且我们根本不使用任何函数表达式