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
insidefoo
指向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