1,共同点:
(1)可以改变函数体内this的指向。
2,区别:
(1)call,apply可以立即执;bind不会立即执行,因为bind返回的是一个函数,执行需要加括号()。
(2)参数不同,apply第二个参数是数组,call和bind有多个参数需要用逗号分开挨个写。
let callStr = "这是window的str";
let callObj = {callStr: "这是obj对象的str"};
function callFun(name, age) {
this.name = name;
this.age = age;
console.log(this, this.callStr);
}
callFun.call(callObj);
callFun.apply(callObj);
callFun.bind(callObj)();
// 以上三条都输出: {callStr: "这是obj对象的str", name: undefined, age: undefined} "这是obj对象的str"
callFun.call(callObj, "张三", "23");
callFun.apply(callObj, ["张三", "23"]);
callFun.bind(callObj, "张三", "23")();
// 以上三条都输出 {callStr: "这是obj对象的str", name: "张三", age: 23} "这是obj对象的str"