以下代码的输出顺序?
function get(){
var name = 'global';
//此处的bind()没有改变this的指向,this依然是全局对象Window
//所以window就是this
var obj = {
name: 'local',
foo: function(){
this.name = 'foo';
}.bind(window)
};
var bar = new obj.foo();
//最后执行,全局的name
setTimeout(function() {
console.log(window.name);
}, 0);
//第一次输出,此时bar.name为foo
console.log(bar.name);
var bar3 = bar2 = bar;
//第二次输出,修改之后的name
bar2.name = 'foo2';
console.log(bar3.name);
}
答案:
foo foo2 global 原因参见代码注释
bind() 改变this的指向。
bind()方法主要就是将函数绑定到某个对象,bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()中的第一个参数的值,例如:f.bind(obj),实际上可以理解为obj.f(),这时f函数体内的this自然指向的是obj;