在JavaScript中,第一个绑定决定了谁“;这个“;是(绑定两次或第二次并不重要)

In JavaScript, the first bind determines who "this" is? (Binding it twice or a second time doesn't matter)

本文关键字:绑定 不重要 两次 第二次 这个 JavaScript 第一个 决定了      更新时间:2023-09-26

如果bind(obj)可以返回this绑定到obj的函数,那么不会

fn.bind(obj1).bind(obj2)

返回this绑定到obj2的函数?

看起来只有第一次绑定才会绑定它,而不考虑第二次绑定,或者如果我们绑定两次或两次以上?这是规格的一部分吗?

示例:http://jsfiddle.net/hah0L3nj/

var obj1 = { name: "Mike" },
    obj2 = { name: "Mary" };
console.log(obj1, obj2);
function printName() {
    console.log(this.name);
}
printName.bind(obj1)();
printName.bind(obj2)();
printName.bind(obj1).bind(obj2)();

最后一行将打印"Mike"。

我认为原因是bind是这样实现的:

Function.prototype.myBind = function (obj) {
    var self = this;
    return function () {
        self.call(obj);
    }
};

参见http://jsfiddle.net/hah0L3nj/1/

因此,所做的是一个严格的界限,任何外部界限(额外的包装)都无关紧要。但我想知道bind的其他实现是否可以做其他事情,以及规范中说了什么。

据我所知,函数.bind()不会修改函数本身。相反,它创建了一个新函数,一个包装器,当被调用时,它确保绑定的函数始终获得相同的上下文。除非将bind()的结果存储在变量中,否则它没有任何作用。