1

所以,下面是一个非常简单的例子,我设置thatthis这样我就可以使用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();
4

3 回答 3

2

只需在您想要的方法上使用 bind 并指定上下文

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

    render: function () {
        this.getAsyncData(someFunction.bind(this));
        function someFunction() {
            this.specialFunction();
            this.anotherSpecialFunction();
        }
    }
于 2013-10-07T15:05:19.087 回答
1

我将如何集成 Function.prototype.bind

省略thatthis改为使用并将函数绑定到实例:

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

只是为了让我看看我将来如何使用它?

您现在可以使用它。每个像样的浏览器都支持它,如果您真的关心旧的 Internet Explorer 之类的东西,您可以对其进行填充

于 2013-10-07T15:21:09.470 回答
0

如果您仍想在传递给您的回调函数内部this引用,您希望您的函数看起来像这样:myObjgetAsyncDatarender

render: function () {
    this.getAsyncData((function () {
        this.specialFunction();
        this.anotherSpecialFunction();
    }).bind(this));
}
于 2013-10-07T15:18:27.490 回答