JavaScript爬坑之:apply()與call()的用法和區(qū)別

apply與call都是為了動(dòng)態(tài)改變this而出現(xiàn)的

首先補(bǔ)充知識(shí)點(diǎn):

this

javascript的一個(gè)關(guān)鍵字,代表函數(shù)運(yùn)行時(shí),自動(dòng)生成的一個(gè)內(nèi)部對(duì)象。隨著函數(shù)使用場合的不同,this的值會(huì)發(fā)生變化。但是有一個(gè)總的原則,那就是this指的是,調(diào)用函數(shù)的那個(gè)對(duì)象。

  • 在頁面中,this可以表示全局對(duì)象,方法的調(diào)用對(duì)象。
  • nodejs中,不太一樣,一個(gè)js文件就是一個(gè)module.exports,this一般指這個(gè)module.exports,或者內(nèi)部方法的調(diào)用對(duì)象

apply與call

前面已經(jīng)說了applce call是函數(shù)對(duì)象的方法,允許切換函數(shù)執(zhí)行的上下文環(huán)境(context),也就是this在函數(shù)中綁定的對(duì)象,
區(qū)別是:

Function.apply(object,[ ]) //后面?zhèn)鲄?shù)以數(shù)組的形式

Function.call(object,...params) //后面?zhèn)鲄?shù)分開傳輸?shù)?

舉個(gè)例子

function Cat(hello){
    this.name = "cat";
    this.msg = "i am cat";
    this.say = function(){
      alert(this.name + " say :" + this.msg);
  }
}

var cat = new Cat("i am a cat");
cat.say(); //cat say: i am a cat 

var cat = new Cat("i am a cat");
cat.say(); //cat say: i am a cat 
var dog = {name:"dog",msg:"i am a dog"};
cat.say.apply(dog); // dog say :i am a dog

新建一個(gè)cat,cat有方法say,但是dog沒有方法say,使用apply就是把執(zhí)行方法saythis或者叫上下文,變成了dog,這時(shí)this.namethis.msg就是dognamemsg

參考文獻(xiàn)

深入淺出 JavaScript 中的 this

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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