關(guān)于JS中的apply,call,bind的深入解析
來源:易賢網(wǎng) 閱讀:624 次 日期:2016-07-08 15:12:33
溫馨提示:易賢網(wǎng)小編為您整理了“關(guān)于JS中的apply,call,bind的深入解析”,方便廣大網(wǎng)友查閱!

在Javascript中,F(xiàn)unction是一種對象。Function對象中的this指向決定于函數(shù)被調(diào)用的方式。使用apply,call 與 bind 均可以改變函數(shù)對象中this的指向,在說區(qū)別之前還是先總結(jié)一下三者的相似之處:

1、都是用來改變函數(shù)的this對象的指向的。

2、第一個參數(shù)都是this要指向的對象。

3、都可以利用后續(xù)參數(shù)傳參。

call方法: 

語法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 

定義:調(diào)用一個對象的一個方法,以另一個對象替換當前對象。 

說明:call 方法可以用來代替另一個對象調(diào)用一個方法。call 方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對象。 

如果沒有提供 thisObj 參數(shù),那么 Global 對象被用作 thisObj。

apply:

語法:apply(thisObj,數(shù)組參數(shù))

定義:應(yīng)用某一個對象的一個方法,用另一個對象替換當前對象

說明:如果參數(shù)不是數(shù)組類型的,則會報一個TypeError錯誤。

bind:

在EcmaScript5中擴展了叫bind的方法(IE6,7,8不支持),bind與call很相似,,例如,可接受的參數(shù)都分為兩部分,且第一個參數(shù)都是作為執(zhí)行時函數(shù)上下文中的this的對象。不同點有兩個:

①bind的返回值是函數(shù);②后面的參數(shù)的使用也有區(qū)別;

先看例子一:

function add(a, b) {

  alert(a + b);

}

function sub(a, b) {

  alert(a - b);

}

對于,call,可以這么用:

add.call(sub,3,1);結(jié)果為4

對于,apply,可以這么用;

add.apply(sub,[3,1]);結(jié)果為4

對于,bind,可以這么用:

add.bind(sub)(3,1);結(jié)果為4

可以看到輸出結(jié)果都一樣,但是傳參用法不一樣;

再看例子二:

function jone(name,age,work){

  this.name=name;

  this.age=age;

  this.work=work;

  this.say=function(msg){

    alert(msg+",我叫"+this.name+",我今年"+this.age+"歲,我是"+this.work)

  }

}

var jack={

  name:"jack",

  age:'24',

  work:"學生"

}

var pet=new jone();

pet.say.apply(jack,["歡迎您"])

console.log(this.name)

對于call,需要這樣:

pet.say.call(jack,"歡迎您!")

對于apply,需要這樣:

pet.say.apply(jack,["歡迎您!"])

對于bind,需要這樣:

pet.say.bind(jack,"歡迎您")()

此時輸出console.log(this.name),發(fā)現(xiàn)this.name為jack,this上下文已經(jīng)發(fā)生改變了;

以上這篇關(guān)于JS中的apply,call,bind的深入解析就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機網(wǎng)站地址:關(guān)于JS中的apply,call,bind的深入解析

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)