国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

淺談call()、apply()、bind()方法

zhangrxiang / 1078人閱讀

摘要:函數(shù)調(diào)用方法一般我們是這樣調(diào)用函數(shù)的和現(xiàn)在我們說(shuō)一說(shuō)方法和方法。他們都是調(diào)用一個(gè)對(duì)象的方法,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象。例如方法在上面的例子中,,意思就是用來(lái)替換。和方法比較類似,其作用都是改變上下文的。

call(), apply(), bind() 函數(shù)調(diào)用方法

一般我們是這樣調(diào)用函數(shù)的:

function add(x){
    console.log(x)
}
add(2)//2
call()和apply()

現(xiàn)在我們說(shuō)一說(shuō) call 方法和 apply 方法。他們的第一個(gè)參數(shù)都是需要調(diào)用的函數(shù)對(duì)象,在函數(shù)內(nèi)這個(gè)參數(shù)就是this的值。call 和 apply 的區(qū)別在于 call 傳的值可以是任意的,而 apply 傳的值必須是數(shù)組。

他們都是調(diào)用一個(gè)對(duì)象的方法,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象。

例如:

function add(a,b){
    return a+b;
}
function sub(a,b){
    return a-b;
}
var a1 = sub.call(add,5,3);
var a2 = add.call(sub,5,3);
/* apply 方法
var a1 = sub.apple(add,[5,3])
var a2 = add.apple(sub,[5,3])
*/
console.log(a1)//2
console.log(a2)//8

在上面的例子中,sub.call(add,5,3) = sub(5,3),意思就是用 sub 來(lái)替換 add 。

bind()

bind 和 call 方法比較類似,其作用都是改變上下文的this。但是它們還是有些許區(qū)別:

bind 的返回值是函數(shù)

//都是將obj作為上下文的this
function func(name,id) {
    console.log(name,id,this);
}
//什么也不加
func("", "-->"); //---> window
//使用bind是 返回改變上下文this后的函數(shù)
var obj = "Look here";
var a = func.bind(obj, "bind", "-->");
a(); //bind--->
//使用call是 改變上下文this并執(zhí)行函數(shù)
var b = func.call(obj, "call", "-->");//call--->
b(); //TypeError: undefined is not a function

后面的參數(shù)的使用也有區(qū)別

function f(a,b,c){
    console.log(a,b,c);
}
var f_Extend = f.bind(null,"extend_A")
f("A","B","C")  //這里會(huì)輸出--> A B C
f_Extend("A","B","C")  //這里會(huì)輸出--> extend_A A B
f_Extend("B","C")  //這里會(huì)輸出--> extend_A B C
f.call(null,"extend_A") //這里會(huì)輸出--> extend_A undefined undefined

call 是把第二個(gè)及以后的參數(shù)作為方法的實(shí)參傳進(jìn)去;
而bind 雖說(shuō)也是獲取第二個(gè)及以后的參數(shù)用于之后方法的執(zhí)行,但是f_Extend中傳入的實(shí)參則是在bind中傳入?yún)?shù)的基礎(chǔ)上往后排的。

//這句代碼相當(dāng)于以下的操作
var f_Extend = f.bind(null,"extend_A")
//↓↓↓
var f_Extend = function(b,c){
    return f.call(null,"extend_A",b,c);
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/87375.html

相關(guān)文章

  • 淺談-this

    摘要:回調(diào)函數(shù)中調(diào)用在回調(diào)函數(shù)中一般有兩種情況回調(diào)函數(shù)為匿名函數(shù)時(shí),回調(diào)函數(shù)的會(huì)指向,需要對(duì)回調(diào)函數(shù)。回調(diào)函數(shù)為箭頭函數(shù)時(shí),回調(diào)函數(shù)的會(huì)指向他的直接上層。 淺談-this this簡(jiǎn)單而又神秘,使用場(chǎng)景多變而又復(fù)雜,這造就了它成為了初級(jí)javascript開發(fā)人員不愿接觸的東西,高級(jí)javascript都想探究的東西。文本亦是對(duì)this的致敬。 this是什么? this是當(dāng)前執(zhí)行環(huán)境...

    archieyang 評(píng)論0 收藏0
  • 淺談javascript里面的this、callapplybind

    摘要:如果該參數(shù)的值為或,則表示不需要傳入任何參數(shù),從開始可以使用類數(shù)組對(duì)象。當(dāng)使用操作符調(diào)用綁定函數(shù)時(shí),該參數(shù)無(wú)效。當(dāng)綁定函數(shù)被調(diào)用時(shí),這些參數(shù)將置于實(shí)參之前傳遞給被綁定的方法。 在了解call,apply之前需要先了解下javascrit中this指向 this的指向在ES5里面,this永遠(yuǎn)指向最后調(diào)用它的那個(gè)對(duì)象舉個(gè)栗子: var name = outerName; function...

    Lemon_95 評(píng)論0 收藏0
  • 淺談 javascript 中的this綁定問(wèn)題

    摘要:綁定使用方式進(jìn)行調(diào)用函數(shù)時(shí),會(huì)發(fā)生構(gòu)造函數(shù)的調(diào)用。先上圖,然后根據(jù)文字閱讀使用調(diào)用函數(shù)之后,該函數(shù)才作為構(gòu)造函數(shù)進(jìn)行調(diào)用,構(gòu)造一個(gè)全新的對(duì)象賦值給,而對(duì)象的指向了的對(duì)象,的對(duì)象有一個(gè)屬性指向的構(gòu)造函數(shù)這個(gè)就是的原型鏈,也是的特性。 javascript語(yǔ)言是在運(yùn)行時(shí)前即進(jìn)行編譯的,而this的綁定也是在運(yùn)行時(shí)進(jìn)行綁定的。也就是說(shuō),this實(shí)際上是在函數(shù)被調(diào)用時(shí)候發(fā)生綁定的,它指向什么完...

    duan199226 評(píng)論0 收藏0
  • Underscore 源碼(三)隨機(jī)洗牌算法

    摘要:隨機(jī)洗牌算法說(shuō)實(shí)話,以前理解數(shù)組的排序,都是將數(shù)組按照一定的邏輯由大到小或者由小到大排序,我自己是沒(méi)有碰到過(guò)隨機(jī)打亂數(shù)組排序的問(wèn)題。然后里用的是所謂的洗牌算法,很高效。總結(jié)又是三個(gè)知識(shí)點(diǎn),分別是隨機(jī)洗牌分組和函數(shù)的實(shí)現(xiàn),沒(méi)什么復(fù)雜的。 這是第三篇關(guān)于 Underscore 的源碼解讀,最近一段時(shí)間學(xué)的東西很少,自己太忙了,一方面忙著找實(shí)習(xí),晚上回去還要寫畢業(yè)論文。畢業(yè)論文真的很憂傷,因...

    silencezwm 評(píng)論0 收藏0
  • 淺談 applycall

    摘要:要想記得牢,首先要記住它存在的目的。或可以看出和是為了動(dòng)態(tài)改變而出現(xiàn)的,如果一個(gè)沒(méi)有某個(gè)方法,而別的有,那么就用得上和了。那和有什么區(qū)別呢請(qǐng)看下邊這個(gè)例子很容易就可以看出和的區(qū)別就是傳參數(shù)的方式不同。 要想記得牢,首先要記住它存在的目的。在javascript OPP中,我們經(jīng)常這樣定義: function person(){} person.prototype = { nam...

    arashicage 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<