ホームページ > ウェブフロントエンド > jsチュートリアル > 配列関数shiftとpopを使用してJS_javascriptスキルで無視可能なパラメータを作成する例

配列関数shiftとpopを使用してJS_javascriptスキルで無視可能なパラメータを作成する例

WBOY
リリース: 2016-05-16 16:46:33
オリジナル
1766 人が閲覧しました

JS 配列は、shift() と Pop() という 2 つのメソッドをサポートしています。これらはそれぞれ、データの先頭と末尾から値を削除し、削除された値を返すことを参照します。理解するには例を見てください:

コードをコピー コードは次のとおりです:

var arr = ['s','o','f','i','s','h'];

arr.shift(); // 's'
arr を返します // 現在 ['o','f','i','s','h']
arr; () // Return 'h'
arr // 現在は ['o','f','i','s']


多くの JS フレームワークで非常に一般的です。メソッドでは複数のパラメータを渡すことができますが、これらのパラメータの一部は無視される可能性があります。これらの無視されるポイントは最初または最後のものである可能性があります。従来の記述方法では、パラメータが存在するかどうか、またはパラメータの数を判断して最終値を決定します。

ここでは、関数の引数オブ​​ジェクトを使用できるだけでなく、配列のシフトやポップを使用して、柔軟なアプリケーションを実現できます。

1. fn API が次のようになるように、shift
を使用して .bind() メソッドを実装する方法:

コードをコピー コードは次のとおりです:

// fn のスコープはオブジェクトに制限されます
// オブジェクトを除き、バインド メソッドのすべてのパラメータが渡されますfn
fn.bind(object, param1, param2, [, paramN]);

まず例を見てみましょう。もちろん、この例でより重要なのは、call と apply の適用です。ただし、ここで説明したいのはシフトの適用です:
コードをコピーします コードは次のとおりです:

//[`.bind`](http://www.prototypejs.org/api/function/bind) Prototype.js のメソッド
Function.prototype.bind = function(){
var fn = this,
args = Array.prototype.slice.call(arguments),
object = args.shift();
return function(){
return fn.apply( object,
args.concat(Array.prototype.slice.call(arguments)));
};
};

引数オブジェクト (配列のようなオブジェクト、このメソッドと同様に、主にオブジェクトをスコープとして分離し、残りのパラメータ配列を巧みに fn に渡す、つまり関数を呼び出すために使用します。オブジェクトのスコープに制限したい。

2. Pop を使用します
私は最近 seajs を試しています。その API の 1 つを例として挙げてみましょう:

コードをコピーします コードは次のとおりです。

define(id, dependency, callback)

これはモジュールの API を定義します。id と依存関係は省略できます。ここで、このサポートをどのように実装するか? if を使って判断する場合、実際には if (arguments === 1) {...} elseif ... をたくさん使わなければなりません。もちろん、これには利点がある場合もあります (?、考えてみてください)。ここでは、そのようなサポートの実装を容易にするために Pop を使用することがあります:
コードをコピー コードは次のとおりです:

var define = function(){
// このコールバックを取り出します
var args = [].slice.call(arguments)
fn = args.pop();
// 何かをする その他の興味深いこと
fn.apply(null, args)
// ...
},
callback = function(){
var args = argument, i = 0, len = args.length;
if(len === 0) console.log('コールバックは 1 つだけ');
for(;i console.log( args[i ]);
}
}

// 3 つの実行結果を見てみましょう
define(callback);
define('パラメータが 2 つあります', callback);
define('パラメータが 3 つあります', 'hello world ', callback);


2 日前、同僚と私が JS のテクニックを学んでいたときに作成したリファレンスです。コードに没頭しすぎないようにと常に自分に言い聞かせていますが、JS に限らず、コードは常に私たちに楽しさを与えすぎます。好きになれない方法。ははは。
関連ラベル:
js
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート