javascript中的新绑定?

javascript中的新绑定?,javascript,binding,Javascript,Binding,在下面的绑定代码段中: function foo(something) { this.a = something; } var obj1 = {}; var bar = foo.bind( obj1 ); bar( 2 ); console.log( obj1.a ); // 2 var baz = new bar( 5 ); console.log( obj1.a ); // 2 console.log( baz.a ); // 5 在这一步中,var bar=foo.bind

在下面的绑定代码段中:

function foo(something) {
    this.a = something;
}

var obj1 = {};

var bar = foo.bind( obj1 );
bar( 2 );
console.log( obj1.a ); // 2

var baz = new bar( 5 );
console.log( obj1.a ); // 2
console.log( baz.a ); // 5
在这一步中,
var bar=foo.bind(obj1)我们正在绑定
obj1
,它对于
foo
函数是空的

执行
bar(2)
后,
obj1
值2

想知道触发了什么
条(2)

我的假设:

由于
bar
被分配给
foo
并与
obj1
绑定,因此调用
bar(2)
可以分配
this.a=2
并将该值保留在
obj1
中(即obj1={a:2})


我的假设正确吗?

你的假设正确

 var bar = foo.bind( obj1 );
使bar成为对foo对象的引用。因此,您现在可以通过bar访问该功能

 bar( 12 );
如果您调用
console.log()
等等,则打印12个。

此处
bind(obj1)
的工作原理就像您将
foo
函数的
范围覆盖到
obj1
中的
关键字替换为
foo
中的空白对象(
obj1

function foo(something) {
    //this = {}  (obj1);
    //this.a == obj.a
    this.a = something;
}

var obj1 = {};

var bar = foo.bind(obj1);

对函数调用
bind()
,将返回一个新的绑定函数。当您调用此绑定函数时,它将以您传入的上下文作为第一个参数执行原始函数。因此,当您通过绑定函数调用它时,
this
inside
foo
指向
obj1

要理解这一点,您需要首先了解.bind做了什么

bind是一个函数,返回另一个名为bind的函数

function x (){
  console.log(this.item)
}
考虑上面的代码,不知道什么是

var obj = { item  : 10};
考虑这个对象,这个对象确实知道它的item属性

x
对象(函数)上调用.bind时,它返回相同的函数副本(称为bind),但上下文为
obj{item:10}

var bound = x.bind(obj);
这个特殊的语句说,在obj的上下文中给出这个特殊的函数

现在,如果我们调用
bound()
它将打印
10