1

次のコードに出くわしましたが、その[]意味が知りたいです:

function checkForImage(mutation) {
        if (mutation.addedNodes && (mutation.addedNodes.length > 0)) {
            [].slice.call(mutation.addedNodes).forEach(function(node) { ...
4

1 に答える 1

5

目的は[]、関数を取得できるようにするために、配列 (は配列) を取得するsliceことです。

mutation.addedNodesはおそらく「配列に似ている」ため、これが必要です。配列関数は機能しますが、のインスタンスではありませんArray。ここで、このコンストラクトsliceは配列を作成します (forEach関数が使用可能になるように)。この構成は、ライブ ノード リストなどで一般的です。このページのコンソールでテストできます。

document.getElementsByTagName('img').constructor // -> NodeList
document.getElementsByTagName('img').forEach // -> undefined
[].slice.call(document.getElementsByTagName('img')).constructor // -> Array
[].slice.call(document.getElementsByTagName('img')).forEach // -> a function

それもあったかもしれません

Array.prototype.slice.call(mutation.addedNodes).forEach(function(node) {

これにより、役に立たないインスタンス (コストはおそらく途方もなく低い) の作成を回避できますが、より冗長になります。

しかし、よりシンプルでクリーンなソリューションは

[].forEach.call(mutation.addedNodes, function(node) {

ただし、隠しコードによって実数配列の使用が正当化される場合を除きます。

于 2013-11-02T22:12:34.193 に答える