Eigenschaft eines Javascript-Klasse berechnet, aus der andere Eigenschaften in der gleichen Klasse
Dies ist wahrscheinlich etwas ziemlich dumm, dass ich bin fehlt, aber wie bekomme ich die Eigenschaft einer Klasse automatisch neu berechnet auf der Grundlage der Werte der anderen Eigenschaften in der gleichen Klasse?
z.B.
function Test() {
this.prop1 = 1;
this.prop2 = 2;
this.prop3 = this.prop1 + this.prop2;
}
tester = new Test();
alert (tester.prop1); //expect 1
alert (tester.prop2); //expect 2
alert (tester.prop3); //expect 3
tester.prop1 += 1;
alert (tester.prop1); //expect 2
alert (tester.prop2); //expect 2
alert (tester.prop3); //expect 4
oder brauche ich prop3 gesetzt werden = calcProp3() und dann die Funktion so auf:
this.calcProp3 = function() {
var calc = this.prop1 + this.prop2;
return calc;
}
Danke an alle.
- Sie können auch eine Funktion zur Erhöhung der zahlen, die auch eine Neuberechnung der rest. Also anstatt
tester.prop1 += 1;
können Sie eine Funktion aufrufen, die fügt eine Zahl ein und aktualisiert den rest.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zwei Möglichkeiten:
Erstellen einer Eigenschaft mit einem getter, die aussieht wie eine einfache property-Zugriff, wenn Sie es verwenden, aber ist in der Tat eine Funktion aufrufen, oder
Tun Sie Ihre
calcProp3
- Funktion, die macht es sich für den coder mitTest
, dass Sie eine Funktion aufrufenOption 2 ist Ihre einzige option, wenn Sie die Notwendigkeit der Unterstützung von wirklich veralteten Browsern wie dem IE8, da IE8 nicht unterstützt Getter.
Mit einem getter
Hier in 2017 würden Sie vermutlich definieren Sie es in einem
class
(transpiling, wenn notwendig, für Browser, die keine Unterstützung ES2015 ' s [aka "ES6"]class
):JS:
Wenn Sie wollten, sich selbst zu begrenzen, um Funktionen von ES5 (spec veröffentlicht im Dezember 2009, nicht unterstützt, im IE8 -), würden Sie definieren einen getter auf
Test.prototype
werden, entweder mitObject.defineProperty
(spec, MDN):JS:
...oder durch den Austausch von
Test.prototype
und mit dem Objekt-Initialisierer-syntax für Getter (denken Sie daran,constructor
):JS:
Mit einer Funktion
Hier im Jahr 2017, würde Sie wahrscheinlich definieren Sie als eine Methode unter Verwendung
class
syntax (transpiling, wenn notwendig, für ältere Browser):JS:
Wenn Sie wollte-stick mit ES5 (eigentlich in diesem Fall ES3) bietet Unterstützung für veraltete Browser, fügen Sie einfach eine Funktion, um den Prototyp:
JS:
Javascript unterstützt jetzt den standard-Weg für die Implementierung von setter und Getter über
- Objekt.defineProperties()
.Nachdem ES6 können Sie berechnen, im Konstruktor:
JS: