2017-09-23 1 views
0

Ich lerne immer noch die Ins und Outs von bind und Pfeilfunktionen.Gibt es Fälle in modernem JavaScript, in denen Pfeilfunktionen nicht verwendet werden können, wo früher "bind" verwendet wurde?

Es scheint, dass wir wo immer wir bind verwendet haben, jetzt eine Pfeilfunktion verwenden sollten, obwohl ich es noch nicht genau so geschrieben habe.

Also ich frage mich, ob das wahr ist oder wenn es Fälle gibt, in denen wir noch bind verwenden sollten, obwohl eine Pfeilfunktion funktioniert, oder einige Fälle, in denen eine Pfeilfunktion nicht funktioniert und bind immer noch der einzige Weg ist zu tun, was du willst.

Oder, wenn ich total aus bin, in neuen JS-Code, wann sollte ich eine Pfeilfunktion bevorzugen und wann sollte ich bind bevorzugen?

+2

Nun, wenn Sie jemals an etwas anderes als 'this' binden wollen, dann müssen Sie' .bind' verwenden. Kommt nicht oft vor. –

+0

Ich habe Fälle gesehen, in denen Sie Dinge * zusätzlich zu * 'this 'binden möchten. In diesem Fall funktioniert eine Pfeilfunktion immer noch und Sie übergeben diese als zusätzliche Argumente. Ich habe 'bind' noch nicht ohne' this' gesehen, aber es ist definitiv möglich, also denke ich, dass es gelegentlich gemacht wird (-: – hippietrail

+0

Voting, um wieder zu öffnen. Keine der Antworten auf die andere Frage listet irgendwelche Anwendungsfälle auf Binde über Pfeilfunktionen überhaupt. Die Antworten hier sind einzigartig. – hippietrail

Antwort

3

Ich sehe 2 Vorteile:

Partial Anwendung:

der BIND-Verfahren verwendet werden kann, um eine Funktion Argumente voreinzustellen; So können Sie eine Unterfunktion einer Funktion erstellen (nicht wortwörtlich, hinter den Kulissen, es gibt nur eine Funktion), indem Sie vor dem Aufruf ein Argument übergeben, so dass dieses Argument, für das Sie voreingestellt haben, verwendet wird alle Aufrufe der von bind zurückgegebenen Funktion. @Charlie_H hat dies bereits erklärt, aber ich werde ein Beispiel liefern, wie gut:

function foo(bar, baz) { 
return bar + baz; 
} 

var sub_foo = foo.bind(Object.create(null), 20); 

console.log(sub_foo(60)); 
console.log(sub_foo(120)); 

So wie Sie in dem obigen Beispiel sehen können, die bind Methode erlaubt mir zu schaffen, was Sie eine Unterfunktion nennen könnte Aus foo wird diese Funktion immer 20 für ihren ersten Parameter verwenden.

Jetzt wieder, lassen Sie sich nicht meine schlechte Formulierung irreführen, bind schafft nicht wirklich eine neue Funktion! hinter den Kulissen wird die ursprüngliche Funktion verwendet, die einzige Sache ist bind wird einige seiner Magie durchführen, so dass der Parameter bind immer verwendet wird. Ich benutze das Wort "Unterfunktion", weil es das Ganze leichter verständlich macht.



Fähigkeit, die this der Zielfunktion zu binden, was auch immer Objekt, das Sie wollen:

Mit Fett-Pfeil-Funktionen, die this der Fett-Pfeil-Funktion wird immer auf die this von gebunden werden der umschließende Umfang; mit binden, können Sie die Zielfunktion des this auf ein beliebiges Objekt binden Sie wollen:

function foo() { 
return this.baz; 
} 

var bar = foo.bind({baz: "Hell yeah!"}); 

bar(); // "Hell yeah!" 


, Darüber hinaus ist die this Bindung von Fett-Pfeil-Funktionen nicht außer Kraft gesetzt werden, so ist dies eine subtile Detail, aber immer noch nützlich.


Eine weitere Sache, die ich in dem Buch hinzufügen mögen Sie nicht JS wissen: diese & Objekt Prototypen, Kyle Simpson sagt, dass man nicht Fett-Pfeil-Funktionen umgehen this Komplexität verwenden sollte, welche Art von verbiegt JavaScript this Regeln, da ihre Verwendung Wurzeln auf das var self = this Muster zurückgeht, und die Verwendung dieses Musters stammt von einem Mangel an Verständnis von JavaScript this Verhalten. Kurze Version: Er bevorzugt bind. Ich sehe nichts mit der Verwendung von Fett-Pfeil-Funktionen, IMO machen sie sogar Code lesbarer, nur indem man sie anschaut, können Sie sehen, was der Entwickler versucht, und wie sie das inzwischen mit bind verwendet haben , Sie wissen nicht genau, was der Entwickler zu tun versucht und warum sie es tun, bis Sie das erste Argument von bind betrachten. Ich empfehle Fett-Pfeil-Funktionen, wo Sie die this der Fett-Pfeil-Funktion an die aktuellen Bereich this und bind gebunden werden, wenn Sie wollen, dass es an etwas anderes gebunden ist.


Wenn Sie Teile meiner Antwort nicht verstehen, fragen Sie mich, und ich werde versuchen, in den Kommentaren zu erarbeiten.

2

Ich sehe einen zusätzlichen Vorteil der bind Methode, da es teilweise angewendet werden kann.

function list() { 
    return Array.prototype.slice.call(arguments); 
} 

var list1 = list(1, 2, 3); // [1, 2, 3] 

// Create a function with a preset leading argument 
var leadingThirtysevenList = list.bind(null, 37); 

var list2 = leadingThirtysevenList(); 
// [37] 

var list3 = leadingThirtysevenList(1, 2, 3); 
// [37, 1, 2, 3] 

(mit freundlicher Genehmigung here)

Ich halte Pfeil Funktionen für Situationen, in denen eine Kurz Syntax praktisch ist, und der Kontext der Ausführung sollte nicht sein eigenes sein.

Verwandte Themen