一、call,apply,bind的相同点:
都是改变this指向的;
第一个参数都是this要指向的对象;
都可以利用后续参数传参;
二、call,apply,bind的区别:
call和bind的参数是依次传参,一一对应的;
但apply只有两个参数,第二个参数为数组;
call和apply都是对函数进行直接调用(函数已经执行),而bind方法返回的仍是一个函数(新生成一个新的函数);
const person = { name: "小明", age : 16, hobby:"打游戏", score:100, speak:function(hobby,score){ console.log("名字",this.name,"年龄",this.age,hobby,score); } } person.speak(); let p1 = {name:"小敏",age:17}; person.speak.call(p1,"吹牛皮",90); //改变speak中this的指向 为p1。 并同时执行, 同时参数按照顺序传递 let p2 = {name:"小小强",age:18}; person.speak.apply(p2,["唱歌",20]); //改变speak中this的指向 为p2。 并同时执行, 参数只有两个,且第二个必须为数组 let p3 = {name:"小王",age:19}; let pp = person.speak.bind(p3,"游泳",96); //改变speak中this的指向为p3, 但并没有执行,返回一个新的函数, 传递参数按照顺序执行 pp(); //执行新的函数