一、call,apply,bind的相同點(diǎn):
都是改變this指向的;
第一個(gè)參數(shù)都是this要指向的對(duì)象;
都可以利用后續(xù)參數(shù)傳參;
二、call,apply,bind的區(qū)別:
call和bind的參數(shù)是依次傳參,一一對(duì)應(yīng)的;
但apply只有兩個(gè)參數(shù),第二個(gè)參數(shù)為數(shù)組;
call和apply都是對(duì)函數(shù)進(jìn)行直接調(diào)用(函數(shù)已經(jīng)執(zhí)行),而bind方法返回的仍是一個(gè)函數(shù)(新生成一個(gè)新的函數(shù));
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。 并同時(shí)執(zhí)行, 同時(shí)參數(shù)按照順序傳遞 let p2 = {name:"小小強(qiáng)",age:18}; person.speak.apply(p2,["唱歌",20]); //改變speak中this的指向 為p2。 并同時(shí)執(zhí)行, 參數(shù)只有兩個(gè),且第二個(gè)必須為數(shù)組 let p3 = {name:"小王",age:19}; let pp = person.speak.bind(p3,"游泳",96); //改變speak中this的指向?yàn)閜3, 但并沒(méi)有執(zhí)行,返回一個(gè)新的函數(shù), 傳遞參數(shù)按照順序執(zhí)行 pp(); //執(zhí)行新的函數(shù)