ホームページ >ウェブフロントエンド >jsチュートリアル >Array.prototype.slice.apply_javascript スキルの使用方法

Array.prototype.slice.apply_javascript スキルの使用方法

WBOY
WBOYオリジナル
2016-05-16 18:32:081660ブラウズ
コードをコピー コードは次のとおりです。

function test(){
//
var args = Array.prototype.slice.apply(arguments);
alert(args);

arguments は関数に固有のオブジェクトです。 JavaScript 構文のプロパティ (Arguments オブジェクト) は、関数の呼び出し時に渡される実際のパラメーターを参照するために使用されます。このオブジェクトは配列によく似ており、長さのプロパティがあり、添字を使用して要素を取得しますが、実際の Array オブジェクトではありません。 Arguments オブジェクトの詳細については、「JavaScript の決定版ガイド」を参照してください。
そのため、arguments.slice() を直接呼び出すと、引数が実際の配列ではないため、「オブジェクトはこのプロパティまたはメソッドをサポートしていません」というエラーが返されます。 Array.prototype.slice.apply(arguments) を呼び出す上記のコードの重要性は、関数のパラメーター オブジェクトを実数の配列に変換できることです。 JavaScript スクリプト エンジンがどのように実装されているかはわかりませんが、この方法は確かに効果的であり、主流のブラウザでテストされています。一方で、Arguments オブジェクトと Array オブジェクト間の関係も推測できます。 JavaScript を作成するときに、処理のために引数オブジェクトを Array に変換する必要がある状況が頻繁に発生する場合は、このテクニックが役に立ちます。
このテクニックは、有名なダグラス・クロックフォードから来ています。拡張により、次のような他の Array プロトタイプ メソッドも引数に適用できます。
var arg0 = Array.prototype.shift.apply(arguments);
シフトも Array のインスタンス メソッドであり、取得と取得に使用されます。配列の最初の要素を返します。もちろん、上記の呼び出しは実行可能ですが、arguments[0] を直接呼び出すほど単純かつ直接的ではありません。拡張すると、この手法を Array.prototype.slice.apply(document.getElementsByTagName('div')); などの多くの Array のような Collection オブジェクトに適用することもできます。ただし、残念ながら、IE はそのような呼び出しをサポートしていません。 Firefox と Opera はどちらも正しい結果が得られます。
Prototype 1.4 で追加された $A() メソッドは、引数を配列に変換するためにもよく使用されます。その実装を見てみましょう:

コードをコピーします コードは次のとおりです。
var $A = Array.from = function(iterable) {
if(!iterable) return[]; iterable.toArray ) {
returniterable.toArray();
} else {
varresults = [];
for(vari=0; i returnresults;
}
}


プロトタイプは、最大限の互換性を確保するために、for ループを使用して新しい配列を構築します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。