529 Stimmen

Wie funktioniert der "Array.prototype.slice.call"?

Ich weiß, dass es verwendet wird, um arguments eine echte Array aber ich verstehe nicht, was passiert, wenn ich Array.prototype.slice.call(arguments); .

1voto

user278064 Punkte 9738

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).

0voto

Pablo Punkte 1

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"]

0voto

Davide Pugliese Punkte 329

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

0voto

/*
    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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X