将JavaScript的.bind()与回调函数集成

时间:2013-10-07 14:46:21

标签: javascript bind

因此,下面是我将that设置为this的情况的非常简单的示例,因此我可以使用myObj的范围。我将如何集成Function.prototype.bind,以便我可以看到将来如何使用它?

var myObj = {

        specialFunction: function () {

        },

        anotherSpecialFunction(){

        },

        getAsyncData: function (cb) {
            // an operation
            cb();
        },

        render: function () {
            var that = this;
            this.getAsyncData(function () {
                that.specialFunction();
                that.anotherSpecialFunction();
            });
        }
    };

    myObj.render();

3 个答案:

答案 0 :(得分:2)

只需对所需的方法使用bind并指定上下文

render: function () {
    this.getAsyncData(this.specialFunction.bind(this));
}

    render: function () {
        this.getAsyncData(someFunction.bind(this));
        function someFunction() {
            this.specialFunction();
            this.anotherSpecialFunction();
        }
    }

答案 1 :(得分:1)

  

我如何整合Function.prototype.bind

忽略that,改为使用this并将函数绑定到实例:

…
    render: function () {
        this.getAsyncData(function () {
            this.specialFunction();
            this.anotherSpecialFunction();
        }.bind(this));
    }
…
  

这样我才能看到将来如何使用它?

您现在可以使用它。每个体面的浏览器都支持它,如果你真的关心旧的Internet Explorers等,你可以shim it

答案 2 :(得分:0)

如果您希望this仍然在传递给myObj的回调函数中引用getAsyncData,那么您希望render函数看起来像这样:

render: function () {
    this.getAsyncData((function () {
        this.specialFunction();
        this.anotherSpecialFunction();
    }).bind(this));
}