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

在JavaScript中,第一个绑定决定谁;这";是(绑定两次或第二次并不重要),javascript,bind,Javascript,Bind,如果bind(obj)可以返回一个函数,其中this绑定到obj,则不会返回 fn.bind(obj1).bind(obj2) 返回与obj2绑定的this函数 看起来只有第一个绑定会绑定它,而不管第二个绑定是什么,或者如果我们绑定它两次还是更多?这是规格的一部分吗 例如: 最后一行将打印“Mike” 我认为原因是bind是这样实现的: Function.prototype.myBind = function (obj) { var self = this; return fu

如果
bind(obj)
可以返回一个函数,其中
this
绑定到
obj
,则不会返回

fn.bind(obj1).bind(obj2)
返回与
obj2
绑定的
this
函数

看起来只有第一个绑定会绑定它,而不管第二个绑定是什么,或者如果我们绑定它两次还是更多?这是规格的一部分吗

例如:

最后一行将打印“Mike”

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

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


因此,所做的是一个紧密的约束,任何外部约束(额外包装)都不会真正起作用。但是我想知道
bind
的其他实现是否可以做其他的事情,以及规范是怎么说的。

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

printName
不会在第二个
处调用。bind()
这是因为在
bind
的链中没有绑定
printName
,而是绑定了
bind()
函数。@Ryeball你是什么意思,那么,如果我分两步绑定它会怎么样:执行
var printName2=printName.bind(obj1)
var printName3=printName2.bind(obj2)
printName3()
@torazaburo应该发布解决此特定问题的方法-引用此问题-这不会创建不同的
.bind()
功能,在?可能不止一种方法返回预期值results@guest271314我的意思是,
bind
bind
。从本质上讲,绑定一个已经绑定的函数不会做任何事情。这是JavaScript,因此您可以发明任何数量的机器来执行其他/不同的绑定,例如,但它们不是绑定,即使您称之为绑定。
Function.prototype.myBind = function (obj) {
    var self = this;
    return function () {
        self.call(obj);
    }
};