javascript中的新绑定?

问题描述 投票:1回答:5

在下面的绑定代码段中

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);控制台....

javascript binding
5个回答
2
投票

这里bind(obj1)的工作方式就像您将scope foo的默认function覆盖为obj1一样,因此this关键字已替换为obj1内部的空白对象(foo)。


2
投票

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


2
投票

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


0
投票

您的假设是正确的。


0
投票

您的假设不正确。当您将new应用于绑定函数(在您的示例中为bar函数)时,this中的bind将被覆盖。因此,this.a的结果是5而不是2,因为在创建新实例时会得到一个新的this

© www.soinside.com 2019 - 2024. All rights reserved.