为什么.call / .bind(从第二次开始)方法忽略传递给它的“this”上下文

时间:2015-09-15 16:27:19

标签: javascript

请解释为什么.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”。

http://jsfiddle.net/sedhuait/uz52ymwn/2/

2 个答案:

答案 0 :(得分:2)

.bind()函数返回一个函数,该函数在调用目标函数时将始终覆盖this的值。一旦你有一个绑定函数,它将始终使用该值,无论它是如何被调用的。

因此,你从.bind()得到的是一个有效的功能(大多数情况下,不完全相同):

function bindResult() {
  return originalFunction.call(valueForThis, arguments.slice(0));
}

该函数并不关心this在其自己的调用上下文中的值。 始终使用您要求的值。 (毕竟,这是.bind()的全部意义。)

答案 1 :(得分:1)

From the manual

  

bind()函数创建一个新函数[...],该值绑定到bind()的第一个参数,该参数不能被覆盖。