在下面的代码中,第一个函数没有绑定到obj,但第二个函数是,所以f()返回fifi并按预期g()返回。Mark Twain但是第三次尝试,是by (obj.getCallBack)first,现在是一个函数,然后调用它,本质上应该和fcase一样。但他们确实打印出来Mark Twain。为什么他们不一定要obj使用bind()但仍然通过this指向来执行obj?
(第四次尝试只是一个通常的方法调用,并且this应该绑定到调用该方法的对象)。
(在当前的 Chrome、Firefox 和 IE 9 上测试)
window.name = "fifi";
var obj = {
name: "Mark Twain",
getCallBack: function() {
return this.name;
}
}
var f = obj.getCallBack;
var g = f.bind(obj);
console.log(f);
console.log(f());
console.log(g);
console.log(g());
console.log((obj.getCallBack)());
console.log(obj.getCallBack());