1017 Stimmen

Javascript call() & apply() vs bind()?

Ich weiß bereits, dass apply y call sind ähnliche Funktionen, die die this (Kontext einer Funktion).

Der Unterschied liegt in der Art und Weise, wie wir die Argumente senden (manuell oder als Array)

Pregunta:

Aber wann sollte ich die bind() Verfahren ?

var obj = {
  x: 81,
  getX: function() {
    return this.x;
  }
};

alert(obj.getX.bind(obj)());
alert(obj.getX.call(obj));
alert(obj.getX.apply(obj));

jsbin

1voto

Der erste Unterschied zwischen den Methoden call(), apply() und bind() in JavaScript ist ihre Ausführungszeit! call() und apply() sind ähnlich und werden sofort ausgeführt, während bind() eine neue Funktion erzeugt, die wir zu einem späteren Zeitpunkt explizit aufrufen müssen!

Ein weiterer Unterschied ist, dass call() bei der Übergabe von Argumenten die Möglichkeit bietet, diese einzeln und durch Kommas getrennt zu übergeben, apply() erlaubt die Übergabe als Array von Argumenten, und bind() erlaubt beides!

Ich habe den Beispielcode unten angehängt!

const person = {
    fullName : function (randomMessage) {
        return `Hello, ${this.firstName} ${this.lastName} ${randomMessage}`;
    }
}

const personOne = {
    firstName : "John",
    lastName : "Doe"
}

const personTwo = {
    firstName : "Jack",
    lastName : "Adhikari"
}

let fullNameBind = person.fullName.bind(personOne, "--Binding");
let fullNameCall = person.fullName.call({firstName : "Sarah", lastName: "Holmes"}, "--Calling");
let fullNameApply = person.fullName.apply(personTwo, ["--Applying"]);

console.log(fullNameBind());
console.log(fullNameCall);
console.log(fullNameApply);

0voto

Mukesh Bhati Punkte 454

Einfach ausgedrückt, werden alle Methoden verwendet, um den Kontext (this) explizit in der regulären Funktion zu setzen

Aufruf: Aufruf ruft die Funktion im gegebenen Kontext auf und erlaubt die Übergabe von Argumenten nacheinander

Anwenden: apply ruft die Funktion im gegebenen Kontext auf und erlaubt es, Argumente als Array zu übergeben

Bind: bind gibt eine neue Funktion zurück, indem der angegebene Kontext gesetzt wird, und erlaubt die Übergabe von Argumenten nacheinander

Anmerkungen:

  1. Call und Apply sind beide ähnlich, der einzige Unterschied ist die Art und Weise, wie sie Argumente erwarten
  2. Die genannten Methoden funktionieren nicht mit der Pfeilfunktion

-1voto

Xin Tao Punkte 29

Die Unterschiede sind: die bind-Funktion wird eine neue Funktion als Ergebnis zurückgeben; die Methoden call und apply führen die Funktion sofort aus, aber apply kann ein Array als Parameter akzeptieren, und es wird das Array getrennt parsen.

-3voto

user7339156 Punkte 1

Die Bindungsfunktion sollte verwendet werden, wenn wir eine Funktion mit einem bestimmten Kontext verbinden wollen, z.B.

var demo = {
           getValue : function(){ 
             console.log('demo object get value       function') 
            }
           setValue : function(){  
              setTimeout(this.getValue.bind(this),1000)           
           }
 }

im obigen Beispiel, wenn wir demo.setValue() Funktion aufrufen und this.getValue Funktion direkt übergeben, dann ruft es nicht demo.setValue Funktion direkt, weil dies in setTimeout bezieht sich auf Fenster-Objekt, so dass wir Demo-Objekt-Kontext zu this.getValue Funktion mit binden übergeben müssen. es bedeutet, dass wir nur Funktion mit dem Kontext des Demo-Objekts nicht Actully Aufruf Funktion übergeben.

Ich hoffe, Sie verstehen.

Weitere Informationen finden Sie unter javascript bind Funktion im Detail kennen

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