摘要:函數(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)//2call()和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
摘要:回調(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)境...
摘要:如果該參數(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...
摘要:綁定使用方式進(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ā)生綁定的,它指向什么完...
摘要:隨機(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è)論文真的很憂傷,因...
摘要:要想記得牢,首先要記住它存在的目的。或可以看出和是為了動(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...
閱讀 4620·2021-10-25 09:48
閱讀 3212·2021-09-07 09:59
閱讀 2167·2021-09-06 15:01
閱讀 2693·2021-09-02 15:21
閱讀 2732·2019-08-30 14:14
閱讀 2184·2019-08-29 13:59
閱讀 2514·2019-08-29 11:02
閱讀 2533·2019-08-26 13:33