Heim  >  Artikel  >  Web-Frontend  >  call() und apply() in js verstehen

call() und apply() in js verstehen

一个新手
一个新手Original
2017-10-26 10:14:201958Durchsuche

Beim Erlernen von JavaScript ist es immer schwierig, die Verwendung von call() und apply() zu verstehen. Ich glaube, viele Freunde haben die gleiche Idee wie ich. Teilen Sie es jetzt mit Ihren Freunden.

Aufruf

Syntax: call([thisObj[,arg1[, arg2[, [,.argN]]]]])
Definition: Rufen Sie eine Objektmethode auf Ersetzen Sie das aktuelle Objekt durch ein anderes Objekt.

Nach dem Lesen der Syntax und Definitionen ist es immer noch schwer zu verstehen, dass die Aufruffunktion mehrere Parameter akzeptieren kann. Der erste Parameter ist das Objekt der aktuellen Operation, und die folgenden Parameter sind die Parameter von Die aufgerufene Methode ist also immer noch schwer zu verstehen:

function Teacher(name, age) {  //定义一个构造函数Teacher
    this.name = name;
    this.age = age;
    this.intro = function() {
        alert("My name is " + this.name + "," + "I'm " + this.age)
    }
}

function Student(name, age) {  //定义一个构造函数Student
    Teacher.call(this, name, age);  //Student调用了Teacher的方法
}
var studentA = new Student("Lily", 19); //实例化一个studentA,传入参数
studentA.intro(); //调用studentA的intro方法 输出:My name is Lily,I'm 19

Im obigen Beispiel wird studentA durch den Konstruktor Student instanziiert Konstruktor, aber wir sehen, dass die Student-Funktion keine Methode hat, aber Student ruft sie auf. Man kann sagen, dass sie die Teacher-Methode erbt, also hat studentA auch die intro()-Methode. Die zehnte Zeile des Codes spielt eine Schlüsselrolle: Teacher.call(this, name, age). Die Funktion dieses Satzes besteht darin, das aktuelle Objekt dazu zu bringen, die Methode eines anderen Objekts aufzurufen Nach der Instanziierung bezieht sich dies auf das studentA-Objekt, und die folgenden Parameter sind die vom Lehrer übergebenen Parameter. Vielleicht ist das obige Beispiel nicht sehr verbreitet, aber wir sehen oft Code wie diesen:

var str="你好美女";
Array.prototype.join.call(str,"!");    //你!好!美!女

Die Join-Methode ist eine für Arrays einzigartige Methode. Es handelt sich um eine Methode, die im Prototyp des Array()-Konstruktors definiert ist Daher erben alle von uns instanziierten Arrays diese Methode, aber die Zeichenfolge str verfügt nicht über eine Verbindungsmethode. Hier leihen wir uns jedoch die Verbindungsmethode des Arrays aus, um die Zeichenfolge zu verarbeiten. Der Ausdruck auf der linken Seite von call ist die Methode des geliehenen Objekts, und das erste Parameterobjekt in call() leiht sich die Methode des Ausdrucksobjekts auf der linken Seite von call (ich weiß nicht, ob ich das verstehen kann, also werde ich mich einfach damit begnügen).

apply

Die Methode apply() hat die gleiche Funktion wie die Methode call, außer dass die übergebenen Parameter unterschiedlich sind.

Syntax: apply([thisObj[,argArray]])
Definition: Eine Methode eines Objekts anwenden und das aktuelle Objekt durch ein anderes Objekt ersetzen.

Der erste Parameter von apply ist derselbe wie call, und der zweite Parameter ist ein Array-Objekt (es kann auch ein Array-ähnlicher Parameter verwendet werden). Er übergibt Parameter nicht mehr in Form eines einzelnen Parameters Liste, aber fügen Sie alle Parameter in ein Array ein und übergeben Sie sie zusammen. Hier müssen wir über das Argumentobjekt sprechen, das in jeder Funktion vorhanden ist und ein Array-ähnliches Objekt ist, das aus allen tatsächlichen Parametern der Funktion besteht. Daher wird der zweite Parameter von apply im Arguments-Objekt übergeben. Schauen Sie sich das folgende Beispiel an:

var arr=[2,3,12,5,234,199,21,1000,2432];
var max=Math.max.apply(Math,arr);
console.log(max); //2432

Es gibt keine Methode, um den Maximalwert im Array zu finden, aber es gibt max im Math-Objekt, um den Maximalwert zu finden, also verwenden wir die Methode apply, um let Das Array erbt die max()-Methode von Math, um den Maximalwert im Array zu ermitteln. Die gleiche Methode oben kann auch durch die call()-Methode ersetzt werden, sie ist jedoch schwieriger zu schreiben und nicht einfach zu lesen . Der Code lautet:

var max=Math.max.call(Math,2,3,12,5,234,199,21,1000,2432);
console.log(max); //2432

Die grundlegendste Verwendung von call und apply. Das ist natürlich das Schöne an diesen beiden Funktionen.


Das obige ist der detaillierte Inhalt voncall() und apply() in js verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn