面试题是这样的:
var s = {
s: 'student',
getS:function(){
console.log(this.s);
}
};
var t = {
s: 'teacher chen'
}
var getS = s.getS;
var getS1 = getS.bind(s);
正确的运行结果是:
getS1(); // student
getS1.call(t); //student
var getS1 = getS.bind(s) 这一句的是说创建一个新函数,并且通过bind,将新函数的this绑定到对象s。输出student没错。但是,getS1.call(t),不是通过call方法,将this绑定到对象t了吗?为嘛输出的仍然是student而不是teacher chen 呢?
对这个问题很感兴趣,查了一些资料
以下是 MDN 里 bind 的 Polyfill , 可以看出来 bind 返回的函数只有用 new 方法当做构造函数调用时才会改变 this, 其他情况下的 this 一直是绑定的那个
另外,还有 https://blog.csdn.net/learnin... 这位作者做了一些实验,结论是:对哪个函数使用bind()方法即改变这个函数的this值,和内置其参数,或者说像克里化一样理解,先预置好参数