Ich weiß, dass es verwendet wird, um arguments
eine echte Array
aber ich verstehe nicht, was passiert, wenn ich Array.prototype.slice.call(arguments);
.
Antworten
Zu viele Anzeigen?Gehen wir davon aus, dass Sie das haben: function.apply(thisArg, argArray )
Die apply-Methode ruft eine Funktion auf und übergibt das Objekt, das an diese Funktion gebunden werden soll gebunden wird, und ein optionales Array von Argumenten.
Die Methode slice() wählt einen Teil eines Arrays aus und gibt das neue Array zurück.
Wenn Sie also anrufen Array.prototype.slice.apply(arguments, [0])
die Array-Slice-Methode wird für Argumente aufgerufen (gebunden).
Wenn .slice() normal aufgerufen wird, handelt es sich um ein Array, und dann wird einfach über dieses Array iteriert und die Arbeit erledigt.
//ARGUMENTS
function func(){
console.log(arguments);//[1, 2, 3, 4]
//var arrArguments = arguments.slice();//Uncaught TypeError: undefined is not a function
var arrArguments = [].slice.call(arguments);//cp array with explicity THIS
arrArguments.push('new');
console.log(arrArguments)
}
func(1,2,3,4)//[1, 2, 3, 4, "new"]
Vielleicht ein bisschen spät, aber die Antwort auf all dieses Chaos ist, dass call() in JS für Vererbung verwendet wird. Im Vergleich zu Python oder PHP wird call() zum Beispiel als super() verwendet. init () oder parent::_construct().
Dies ist ein Beispiel für seine Verwendung, das alles verdeutlicht:
function Teacher(first, last, age, gender, interests, subject) {
Person.call(this, first, last, age, gender, interests);
this.subject = subject;
}
Referenz: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Inheritance
/*
arguments: get all args data include Length .
slice : clone Array
call: Convert Object which include Length to Array
Array.prototype.slice.call(arguments):
1. Convert arguments to Array
2. Clone Array arguments
*/
//normal
function abc1(a,b,c){
console.log(a);
}
//argument
function: function abc2(){
console.log(Array.prototype.slice.call(arguments,0,1))
}
abc1('a','b','c');
//a
abc2('a','b','c');
//a
- See previous answers
- Weitere Antworten anzeigen