JS Array unterstützt zwei Methoden, shift() und pop(), die sich jeweils auf das Löschen eines Werts am Anfang und Ende von Daten und die Rückgabe des gelöschten Werts beziehen. Schauen Sie sich zum Verständnis einfach ein Beispiel an:
var arr = [' s','o','f','i','s','h'];
arr.shift(); // Gibt 's' zurück
arr; // Derzeit ['o','f','i','s','h']
arr.pop () // Return 'h'
arr // Derzeit ist es ['o','f','i','s']
Es ist in vielen JS-Frameworks sehr verbreitet, A Mit der Methode können Sie mehrere Parameter übergeben, und einige dieser Parameter können ignoriert werden. Diese ignorierten Punkte können der erste oder der letzte sein. Die traditionelle Schreibweise besteht darin, zu bestimmen, ob der Parameter vorhanden ist, oder die Anzahl der Parameter, um den Endwert zu bestimmen.
Hier können wir das Argumentobjekt der Funktion sowie Shift und Pop im Array verwenden, um flexible Anwendungen zu erreichen.
1. So implementieren Sie eine .bind()-Methode mit Shift
, sodass die fn-API wie folgt lautet:
// Der Umfang von fn ist auf das Objekt beschränkt
// Mit Ausnahme des Objekts werden alle Parameter der Bindungsmethode an übergeben fn
fn.bind(object, param1, param2, [, paramN]);
Schauen wir uns zunächst ein Beispiel an. Was in diesem Beispiel natürlich wichtiger sein könnte, ist die Anwendung von „Call“ und „Apply“. Worüber wir jedoch sprechen möchten, ist die Anwendung der Verschiebung:
//[`.bind`](http://www.prototypejs.org/api/function/bind) Methode von 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)));
};
};
Wir können das Arguments-Objekt verwenden (array-ähnliches Objekt, Wie bei dieser Methode verwenden wir sie hauptsächlich, um das Objekt als Bereich zu trennen, und übergeben dann geschickt das verbleibende Parameterarray an fn, das heißt, wir rufen die Funktion auf Ich möchte mich auf den Objektbereich beschränken.
2. Pop verwenden
Ich probiere kürzlich Seajs aus. Nehmen wir eine seiner APIs als Beispiel:
define(id, dependencies, callback)
Dies definiert die API eines Moduls, id und Abhängigkeiten können weggelassen werden. Wie kann diese Unterstützung umgesetzt werden? Wenn Sie if zur Beurteilung verwenden, müssen Sie wirklich häufig if (arguments === 1) {...} elseif ... verwenden. Natürlich hat das manchmal Vorteile (?, denken Sie darüber nach). Hier können wir Pop verwenden, um die Implementierung einer solchen Unterstützung zu erleichtern:
var define = function(){
// Diesen Rückruf herausnehmen
var args = [].slice.call(arguments)
fn = args.pop();
// Etwas tun Andere interessante Dinge
fn.apply(null, args)
// ...
},
callback = function(){
var args = arguments, i = 0, len = args.length;
if(len === 0) console.log('Nur ein Rückruf');
for(;i
console.log( args[i ]);
}
}
// Schauen Sie sich die Ausführungsergebnisse der drei an
define(callback);
define('hat zwei Parameter', callback);
define('hat drei Parameter', 'Hallo Welt ', Rückruf);
Eine Referenz, die ich vor zwei Tagen gemacht habe, als meine Kollegen und ich einige Techniken in JS lernten. Obwohl ich mir immer sage, dass ich mich nicht zu sehr in Code vertiefen soll, macht uns Code, nicht nur JS, immer zu viel Spaß. Wie man es nicht mag. Ha ha.