apply,call和bind方法總結(jié)

總結(jié)apply,call和bind方法各自的特點(diǎn)


1.apply:

使用語法:1)函數(shù)名.apply(對(duì)象,[參數(shù)1,參數(shù)2,參數(shù)3......]);

? ? ? ? ? ? ? ? ? ? 2)方法名.apply(對(duì)象,[參數(shù)1,參數(shù)2,參數(shù)3......]);

?作用:改變this指向;

特點(diǎn):傳參需以數(shù)組的形式傳入;

2.call:

使用語法:1)函數(shù)名.call(對(duì)象,參數(shù)1,參數(shù)2,參數(shù)3.....);

? ? ? ? ? ? ? ? ? ? 2)方法名.call(對(duì)象,參數(shù)1,參數(shù)2,參數(shù)3.....);

?作用:改變this指向;

特點(diǎn):傳參需按照參數(shù)列表傳入即可;

3.bind方法

使用語法:函數(shù)名.bind(對(duì)象,參數(shù)1,參數(shù)2,參數(shù)3.....);用法同call一樣

作用:函數(shù)名.bind()方法,相當(dāng)于是復(fù)制了這個(gè)函數(shù),返回值就是復(fù)制后的一個(gè)函數(shù)

4.call和apply以及bind的異同點(diǎn):

? ?相同點(diǎn):作用相同,都是改變this指向

? ? 異同點(diǎn):1.傳參列表不同,call和bind的傳參列表相同,apply的傳參列表略有差異

? ? ? ? ? ? ? ? ? ? ?2.方式不同:call和apply相當(dāng)于調(diào)用,而bind是復(fù)制了一份

注意:無論是apply還是call或者是bind中第一個(gè)參數(shù)不傳,或者是傳的是null,那么函數(shù)中的this都是window

例1:

//創(chuàng)建一個(gè)構(gòu)造函數(shù)Person

function Person(name,sex,age){

? ? ?this.name = name;

}

Person.prototype.sum = function(x,y){

? ? ?console.log((x+y)+"====>"+this.id);

}

function ?Student(name,id){?

? ? //這里將Person構(gòu)造函數(shù)的this指向改為Student

? ?//用法1:使用apply來改變this指向:傳參列表是數(shù)組形式

? ? ? Person.apply(Student,[name]); ?

? ? //用法2:使用call來改變this指向:傳參以參數(shù)列表傳入

? ? ?? Person.call(Student,name);

? ? ? ?this.id = id;

}

//這是Person構(gòu)造函數(shù)的實(shí)例化對(duì)象

var ?per = new Person("小簡(jiǎn)");

//這是Student構(gòu)造函數(shù)的實(shí)例化對(duì)象

var stu = new Student("小明","01");

//改變方法的this指向

//用法1:apply使用

per.hello.apply(Stu,[10,20]);

//用法2:call使用

per.hello.call(Stu,10,20);?



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容