在下面的绑定代码段中
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。
[想知道bar(2)
触发了什么吗?
我的假设:
由于bar
被分配给foo
并与obj1
绑定,所以调用bar(2)
可能已经分配了this.a = 2
并将该值保留在obj1
中(即obj1 = {a:2})。] >
我的假设正确吗?
感谢您的任何帮助。
在下面的绑定代码段函数foo(something){this.a = something; } var obj1 = {}; var bar = foo.bind(obj1); bar(2); console.log(obj1.a); // 2 var baz = new bar(5);控制台....
这里bind(obj1)
的工作方式就像您将scope
foo
的默认function
覆盖为obj1
一样,因此this
关键字已替换为obj1
内部的空白对象(foo
)。
在函数上调用bind()
将返回新的绑定函数。当您调用此绑定函数时,它将以您传入的上下文作为第一个参数执行原始函数。因此,当通过绑定函数调用时,this
中的foo
指向obj1
。
要了解这一点,您需要首先使用.bind做什么?
您的假设是正确的。
您的假设不正确。当您将new
应用于绑定函数(在您的示例中为bar
函数)时,this
中的bind
将被覆盖。因此,this.a
的结果是5而不是2,因为在创建新实例时会得到一个新的this
。