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 に限らず、コードは常に私たちに楽しさを与えすぎます。好きになれない方法。ははは。