Q:

why .call / .bind (from the second time) method ignores the "this" context which is passed to it

Please explain why .call / .bind (from the second time) method ignores the "this" context which is passed to it. What is the reason behind it?
  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();

Actual Output : "sedhu" where expected output is "raja". 
http://jsfiddle.net/sedhuait/uz52ymwn/2/

A:

The .bind() function gives you back a function that will always override the value of this when invoking the target function. Once you've got a bound function, it will always use that value regardless of how it's invoked.
Thus what you get back from .bind() is a function that works (mostly; not exactly) like this:
function bindResult() {
  return originalFunction.call(valueForThis, arguments.slice(0));
}

That function doesn't care what the value of this is in its own invocation context. It always uses the value you asked it to. (That's kind-of the whole point of .bind(), after all.)

