在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ javascript 里面關(guān)于 apply 綁定的不理解

javascript 里面關(guān)于 apply 綁定的不理解

本人新手, 最近在看有關(guān)javascript相關(guān)的書籍的時候遇到了這么一段代碼, 不是特別理解, 有關(guān)apply綁定的, 代碼如下:

const concatAll = (array) => {
    let result = []
    for (let value of array) {
        result.push.apply(result, value)
    }
    return result
}

let letters = [['a', 'b'], ['c', 'd']]
console.log(concatAll(letters)) // ['a', 'b', 'c', 'd']

簡單來說concatAll這個函數(shù)就是可以將嵌套數(shù)組轉(zhuǎn)換成一個數(shù)組, 我所不理解的是代碼第4行, apply這個方法到底是怎樣運行的, 之前學(xué)有關(guān)this的知識也是有點迷迷糊糊的, 不是特別理解, 希望能有前輩給出一個詳細的解答

謝謝!

回答
編輯回答
乖乖噠
在調(diào)用一個存在的函數(shù)時,你可以為其指定一個 this 對象。 this 指當(dāng)前對象,也就是正在調(diào)用這個函數(shù)的對象。 使用 apply, 你可以只寫一次這個方法然后在另一個對象中繼承它,而不用在新對象中重復(fù)寫該方法。

apply 與 call() 非常相似,不同之處在于提供參數(shù)的方式。apply 使用參數(shù)數(shù)組而不是一組參數(shù)列表(原文:a named set of parameters)。apply 可以使用數(shù)組字面量(array literal),如 fun.apply(this, ['eat', 'bananas']),或數(shù)組對象, 如 fun.apply(this, new Array('eat', 'bananas'))。

你也可以使用 arguments 對象作為 argsArray 參數(shù)。 arguments 是一個函數(shù)的局部變量。 它可以被用作被調(diào)用對象的所有未指定的參數(shù)。 這樣,你在使用apply函數(shù)的時候就不需要知道被調(diào)用對象的所有參數(shù)。 你可以使用arguments來把所有的參數(shù)傳遞給被調(diào)用對象。 被調(diào)用對象接下來就負責(zé)處理這些參數(shù)。

2017年8月31日 21:32
編輯回答
墨沫

這個是apply的一個比較巧妙的用法,apply的第一個參數(shù)是this對象,第二個參數(shù)是數(shù)組集合。
這里巧妙的點在于她可以將一個數(shù)組迷人的轉(zhuǎn)換成一個參數(shù)列表([paramA, paramB, paramC])轉(zhuǎn)換成(paramA, paramB, paramC)。利用這個特點,可以高效使用她用于數(shù)組的合并:
Array.prototype.push!

push方法沒有提供push一個數(shù)組,但是它提供了push(param1,param,…paramN) 所以同樣也可以通過apply轉(zhuǎn)換一下這個數(shù)組。也就是你代碼的實現(xiàn)。不知道你懂了沒:)

2018年6月1日 03:22