arguments ist ein in JavaScript integriertes Objekt. Es ähnelt NodeList und verfügt über das Längenattribut, verfügt jedoch nicht über Array-Methoden wie Push und Pop.
Die Formatfunktion von Dean Edwards ist sehr inspirierend:
function format(string) {
var args = arguments;
var pattern = new RegExp('%([1- ' + args.length + '])', 'g');
return String(string).replace(pattern, function(match, index) {
return args[index];
}) ;
}
alert(format('%1 möchte wissen, wessen %2 du %3', 'I', 'shirt', 'wear'));
Beachten Sie drei Punkte: 1. Die Verwendung von String (string) stellt sicher, dass kein Fehler auftritt, wenn string ein beliebiger Wert ist (z. B. null, false, 123 usw.). 2. Überprüfen Sie die Ersetzungsmethode. Der zweite Parameter kann eine Funktion sein, die sehr flexibel ist. 3. Durch die geschickte Kombination von Argumenten und regulären Ausdrücken wird die Formatfunktion realisiert.
So konvertieren Sie Argumente in echte Arrays:
var args = Array.prototype.slice.call(arguments);
Dazu gibt es nichts zu sagen , Klasse Die Slice-Methode kann verwendet werden, um ein Array-Objekt in ein Array umzuwandeln.
Erstellen Sie eine Funktion mit voreingestellten Parametern:
function makeFunc() {
var args = Array.prototype.slice.call(arguments);
var func = args ();
return function() {
return func.apply(null, args.concat(Array.prototype.slice.call(arguments)));
};
}
var majorTom = makeFunc(format, „Hier ist Major Tom für die Bodenkontrolle. Ich bin %1.“);
majorTom(“schritt durch die Tür“);
majorTom(“schwebend auf höchst eigenartige Weise ");
Das ist ziemlich interessant. makeFunc ist eine Funktion, die Funktionen erstellen kann. Die erstellten Funktionen haben alle die gleichen voreingestellten Parameter. Dies vermeidet Codeduplizierung und verbessert die Wiederverwendbarkeit.
Erstellen Sie eine selbstreferenzielle Funktion:
function repeat(fn, times, delay) {
return function() {
if(times-- > 0) {
fn.apply(null, arguments);
var args = Array.prototype.slice.call(arguments);
var self = arguments.callee;
setTimeout(function(){self . apply (null,args)}, delay);
}
};
}
function comms { alarm('s'); , 3, 2000);
somethingWrong("Kannst du mich hören, Major Tom?");