欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript函數(shù)的call、apply和bind的原理及作用詳解

 更新時間:2023年05月22日 09:45:37   作者:咖啡教室  
javascript函數(shù)的call、apply和bind?本質(zhì)是用來實現(xiàn)繼承的,專業(yè)點說法就是改變函數(shù)體內(nèi)部this的指向,當(dāng)一個對象沒有某個功能時,就可以用這3個來從有相關(guān)功能的對象里借用過來,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下

最早javascript實現(xiàn)繼承是通過 prototype 原型鏈,后來有了 class 類,可以像其他面向?qū)ο笳Z言一樣來實現(xiàn)類的繼承。

通俗點說就好像我們小時候,家里要將稻子加工成大米,但是家里又沒有打米機,那就只能背到村里別人開的打米房里,叫別人打開他的打米機,將我們的稻子喂進去,然后就能接出來大米了。

call

call 方法使用一個指定的 this 值和單獨給出的一個或多個參數(shù)來調(diào)用一個函數(shù):

function.call(thisArg, arg1, arg2, ...)

當(dāng)?shù)谝粋€參數(shù)為 null 或 undefined 時,可以使用數(shù)組展開語法實現(xiàn)類似的結(jié)果。請注意,this 可能不是該方法看到的實際值:如果這個函數(shù)處于非嚴格模式下,則指定為 null 或 undefined 時會自動替換為指向全局對象,原始值會被包裝。

apply

apply 方法調(diào)用一個具有給定 this 值的函數(shù),以及以一個數(shù)組(或一個類數(shù)組對象)的形式提供的參數(shù):

function.apply(thisArg, [arg1, arg2])

call 和 apply 其實是同一個東西,區(qū)別只有參數(shù)不同,call 是 apply 的語法糖,call 方法接受的是一個參數(shù)列表,而 apply 方法接受的是一個包含多個參數(shù)的數(shù)組

bind

bind 方法創(chuàng)建一個新的函數(shù),在 bind 被調(diào)用時,這個新函數(shù)的 this 被指定為 bind 的第一個參數(shù),而其余參數(shù)將作為新函數(shù)的參數(shù),供調(diào)用時使用。

function.bind(thisArg[, arg1[, arg2[, ...]]])

三者第一個參數(shù)都是 this 要指向的對象,如果如果沒有這個參數(shù)或參數(shù)為 undefined 或 null,則默認指向全局 window。

實際應(yīng)用場景

應(yīng)用場景一:從數(shù)組中找出最大值、最小值

原生的 Math.max、Math.min 只能傳入用逗號分隔的參數(shù)列表,但實際業(yè)務(wù)中我們往往拿到的是數(shù)組,就可以用下面的方法來實現(xiàn)(也可以用擴展運算符 ... 實現(xiàn)):

let arr = [1, 2, 3]
Math.min.apply(null, arr) // 這里第一個null表示不需要綁定this, 但是也不能省略,不能直接將arr給Math, 因為min必須接受兩個及以上參數(shù)

應(yīng)用場景二:偽數(shù)組轉(zhuǎn)化成真數(shù)組

一般用于dom節(jié)點列表、具有 length 和序號屬性的偽數(shù)組對象、函數(shù)參數(shù) arguments

Array.prototype.slice.apply(fakeArray) // slice 省略參數(shù)時就是截取出所有元素,此處相當(dāng)于 Array.prototype.slice.apply(fakeArray, 0, fakeArray.length)

到此這篇關(guān)于javascript函數(shù)的call、apply和bind的原理及作用詳解的文章就介紹到這了,更多相關(guān)javascript函數(shù)的call、apply和bind內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論