JS中的apply(), call(), bind()方法

這三個關(guān)鍵字經(jīng)??吹剑菑膩頉]有做過詳細(xì)的區(qū)分?;蛘哒f,每次用的時候看一眼,就繼續(xù)專注在別的事情上去了。今天整理一下下。

首先,這三個方法的用法十分相似,都是用來改變函數(shù)運行時的上下文聯(lián)系,其實就是改變this的指向。this引用的是函數(shù)執(zhí)行的環(huán)境對象,就是調(diào)用this的時候才會去尋找它指向誰。

好,先說apply和call。

兩者用法基本相同,用途是在特定的作用域中調(diào)用函數(shù),接收的第一個參數(shù)是運行函數(shù)的作用域,如果call和apply的第一個參數(shù)是null, 那么this就指向了windows。

唯一的不同是apply傳參數(shù)會一整個數(shù)組傳入,而call則是一個個數(shù)值進(jìn)行傳遞。

舉個栗子呢:

banana.call(this, arg1, arg2);

banana.apply(this, [arg1, arg2]);

banana.apply(this, arguments); //傳入arguments對象

那么當(dāng)你要傳的參數(shù)數(shù)量是確定的時候呢,用哪個都可以。

可是如果你有一個數(shù)組,但你不知道里面有多少個值,這時候就需要用apply,不可以用call。


apply()和call()的強大還在于能擴(kuò)充函數(shù)運行的作用域,即對象和方法不需要有耦合關(guān)系。


那么bind呢,是創(chuàng)建了一個新函數(shù),this值會被綁定到傳給bind()函數(shù)的值

window.a = 1;

var obj = { a: 2};

function sayA() {alert(this.a);}

var newA = sayA.bind(o);

newA(); //2



不知道大家喜不喜歡看很多例子,我是有點懶得看一些長篇大論的。。這篇總結(jié)就簡短的寫在這里啦


參考:

http://www.admin10000.com/document/6711.html

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

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

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