var name = 'global';
var obj = {
name: 'local',
foo: function(){
this.name = 'foo';
console.log(this.name);
}.bind(window)
};
var bar = new obj.foo();
setTimeout(function() {
console.log(window.name);
}, 0);
console.log(bar.name);
var bar3 = bar2 = bar;
bar2.name = 'foo2';
console.log(bar3.name);
这个题的整体出题质量还是挺高的,首先咱们来把涉及到的知识罗列一下:
bind
是显式绑定,会修改this
指向,但bind()
函数不会立即执行函数,会返回一个新函数setTimeout
是异步任务,同步任务执行完毕后才会执行异步任务- 绑定优先级: new绑定 > 显式绑定 > 隐式绑定 > 默认绑定
解析
obj.foo
将它的this
通过bind
显式的绑定为window
,但bind
不会立即执行var bar = new obj.foo()
:new
绑定优先级大于bind