2017-02-20 11 views
9

Ich weiß, wie Getter und Setter in JavaScript arbeiten. Was ich nicht verstehe ist, warum wir sie brauchen, wenn wir mit normalen Funktionen das gleiche Ergebnis erzielen können? Betrachten Sie den folgenden Code ein:Warum Getter und Setter in JavaScript verwenden?

var person = { 
    firstName: 'Jimmy', 
    lastName: 'Smith', 
    get fullName() { 
     return this.firstName + ' ' + this.lastName; 
    } 
} 

console.log(person.fullName); // Jimmy Smith 

Wir Getter mit einer Funktion leicht ersetzen:

var person = { 
    firstName: 'Jimmy', 
    lastName: 'Smith', 
    fullName: function() { 
     return this.firstName + ' ' + this.lastName; 
    } 
} 

console.log(person.fullName()); // Jimmy Smith 

Ich sehe nicht den Punkt der Getter und Setter zu schreiben.

+0

Ihre Frage ist, welche ist besser ?, oder wie geht es? –

+4

Ich denke, es ist nur ein "Stil" Angelegenheit, wie Sie nicht "brauchen", sie zu verwenden, Sie "können" sie verwenden, wenn Sie möchten, überprüfen Sie [this] (http://stackoverflow.com/a/ –

+1

) 28222366/2545680) und [dies] (http://stackoverflow.com/questions/1568091/why-use-getters-and-setters) –

Antwort

3

Ein Unterschied zwischen der Verwendung eines Getter oder Setter und der Verwendung einer Standardfunktion besteht darin, dass Getter/Setter bei der Zuweisung automatisch aufgerufen werden. Es sieht also wie eine normale Eigenschaft aus, aber hinter den Kulissen können Sie zusätzliche Logik (oder Checks) haben, die kurz vor oder nach der Zuweisung ausgeführt werden.

Wenn Sie also diese Art von Zusatzlogik zu einer der vorhandenen Objekteigenschaften hinzufügen möchten, die bereits Verweise enthält, können Sie sie in Getter/Setter-Stil konvertieren, ohne den Rest des Codes zu ändern, der Zugriff auf diese Eigenschaft hat.

+1

Und die Frage ist, warum 'foo.bar = baz' mit einem Setter ist besser als' foo.setBar (baz) '... – deceze

+0

Die Frage war etwas anders als das, was Sie sowieso verstehen, fügte einen zweiten Absatz, um den Nutzen zu verdeutlichen. –

+0

Angenommen, Sie entwerfen eine Schnittstelle von Anfang an, um Getter/Setter zu verwenden, anstatt sie nachzurüsten ... was ist dann Ihre Antwort? – deceze