请解释为什么.call / .bind(从第二次开始)方法忽略传递给它的“this”上下文。它背后的原因是什么?
var f1= function(){
console.log(this.name);
};
var a ={name:'sedhu'};
var b= { name:'raja' };
var f2 = f1.bind(a);
f2.call(b);
var f3 = f2.bind(b);
f3();
实际输出:“sedhu”,预期输出为“raja”。
答案 0 :(得分:2)
.bind()
函数返回一个函数,该函数在调用目标函数时将始终覆盖this
的值。一旦你有一个绑定函数,它将始终使用该值,无论它是如何被调用的。
因此,你从.bind()
得到的是一个有效的功能(大多数情况下,不完全相同):
function bindResult() {
return originalFunction.call(valueForThis, arguments.slice(0));
}
该函数并不关心this
在其自己的调用上下文中的值。 始终使用您要求的值。 (毕竟,这是.bind()
的全部意义。)
答案 1 :(得分:1)
bind()函数创建一个新函数[...],该值绑定到bind()的第一个参数,该参数不能被覆盖。