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() を使用できます。
詳しくはリンク先をご覧ください