Array.prototype.slice.call() - 詳細説明

1. 引数

これは配列のようなオブジェクトです. 関数にパラメータを渡す必要があることがよくあります. JS はこの関数に渡されたすべてのパラメータを atguments に保存します. 次のコードで atguments を知ることができます.

let fn = function () {
    //arguments的用法
    console.log("arguments=>", arguments)
    //aguments的类型
    console.log("arguments类型=>", Object.prototype.toString.call(arguments))
    //...
}
fn(1, 2, 3, 4)

上記の引数のタイプis an objectによると、js は関数に渡す最初のパラメーターの属性名を「0」、2 番目のパラメーターを「1」などとして受け取り、属性値は数値になります。また、 arguments が配列のようなプロパティ length であることもわかります

二、Array,prototype

プロジェクトを作成するとき、引数を配列に変換する必要があることがよくあります.ここでは、変換方法の 1 つを詳しく説明します: Array.prototype.slice.call()

console.log("Array.prototype=>", Array.prototype)

上記からわかるように、slice は js の組み込みメソッド Array() のプロトタイプ属性に関するメソッドです (注意: プロトタイプ属性はオブジェクトです)。

 3.スライス()

既存の配列から選択した要素を返します

  • パラメータが 2 つある場合: array.slice(start, end) は、 元の配列から最後までの開始データをインターセプトします。
  • パラメータがない場合: array.slice() は、 元の配列スライスのすべてのデータをインターセプトします。これが配列型である必要はなく、長さプロパティのみが必要です。

Slice はもともと Array と String の単なるメソッドでしたが、なぜクラス配列で直接使用できるのでしょうか? slice() のソースコードを見ることができます

function slice(start, end) { 
    var len = ToUint32(this.length), result = []; 
    for(var i = start; i < end; i++) { 
        result.push(this[i]); } return result; 
    }
}

スライスはこれが配列型である必要はなく、長さ属性のみが必要であることがわかります。また、長さ属性が数値型でない場合もあり、値に変換できない場合、ToUnit32(this.length) は 0 を返します。引数オブジェクトで

四、コール()

call() は this のポイントを変更する関数であることがわかっています

let agrs = Array.prototype.slice.call(arguments)

この時点で、オブジェクト this を Array.prototype から引数に向けます。このように、引数は配列のメソッド slice() を使用できます。

詳しくはリンク先をご覧ください

Supongo que te gusta

Origin blog.csdn.net/qq_52421092/article/details/129774398
Recomendado
Clasificación