Objekt-Eigenschaft "Vorherigen Wert" in Javascript
Ich bin gerade erst anfangen, um meinen Geist um das ganze Objekt-Orientierte Sache, so mit mir tragen.
So, ich sah ein Beispiel für eine Objekt-Funktion (für Javascript), wo Sie einen neuen Wert zuweisen und diesen Wert zugewiesen bekommt, als dass das Eigentum den tatsächlichen Wert. Beispiel:
function Meat (name, color, price) {
function newPrice (new_price) {
this.price = new_price;
}
this.name = name;
this.color = color;
this.price = price;
this.newprice = newPrice;
}
Fein und dandy. Jetzt habe ich die Möglichkeit, weisen Sie einen Preis durch die Verwendung von Speck.Preis oder Speck.newprice. Persönlich scheint dies der höchste Orden der Semantik, funktional, da es nicht die gleiche Sache. Aber als Anwalt für die semantische Codierung, ich werde lassen Sie es schieben. Hier ist, was ich will:
Wenn ich ändern Sie den Wert von Speck.Preis, das Objekt sollte eine Funktion zum speichern der alten Wert in eine Eigenschaft namens " oldprice automatisch. Ich spielte mit dieser, bekam aber nirgendwo. Hier ist, was ich bisher ausprobiert habe:
function Meat (name, color, price) {
function oldPrice () {
this.oldprice = this.price;
}
this.name = name;
this.color = color;
this.oldprice = oldPrice;
this.price = price;
}
///////////////////////
function Meat (name, color, price) {
this.name = name;
this.color = color;
this.oldprice = this.price;
this.price = price;
}
Mehr oder weniger Variationen des. Ich dachte, dass bezogen auf die bereits zugewiesenen Wert (das wäre nichts das erste mal), bevor der neue Wert zugewiesen bekam genug sein würde. Ich weiß, dass der Wert (oder der Mangel davon) ist irgendwo gespeichert, bevor es zugewiesen bekommt, ich weiß nur nicht, wie finden Sie es, ordnen Sie es mit der oldvalue-Eigenschaft, bevor es ausgelöscht.
Okay, vielleicht ist das problem mit meinen Augen oder mit den Fingern dann. Weil ich dachte, ich hatte versucht die Anregungen, die bevor Sie Fragen (ich weiß, ich wollte nicht schweigen Sie!) Es sei denn, ich bin echt verwirrt, sollte dies funktionieren:
function Meat(price)
{
function setPrice(price)
{
this.oldprice = this.price;
this.price = price;
}
this.price=setPrice;
}
bacon = new Meat()
bacon.price = "Expensive";
document.write(bacon.price+"<br />");
document.write(bacon.oldprice+"<br />");
bacon.price = "Cheap";
document.write(bacon.price+"<br />");
document.write(bacon.oldprice+"<br />");
Aber die Ausgabe die ich bekomme ist:
Teuer
undefined
Billig
undefined
Alles okay bis auf das Letzte. Wieder bin ich bereit zu akzeptieren, ein schlechtes Sehvermögen und schlechte Rechtschreibung als root. Aber ich kann ' T es herausfinden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese bereit, wenn Sie anrufen
obj.newPrice(xxx);
- ich glaube nicht, können Sie es automatisch tun, wenn Sie mitobj.price = xxx;
Edit:
Wie bereits von @mauris empfangen, Javascript 1.5 unterstützt Getter und setter (siehe auch hier - Sie können von Ihnen denken, als Methoden, getarnt als Eigenschaften.
Mit diesen, würde der code wie folgt Aussehen:
Leider ist diese syntax nicht unterstützt wird vom Internet Explorer noch nicht.
defineSetter
ist nicht ein jQuery-Sache. Aber der IE es nicht unterstützt... :/Ist es das?
Überlegen Sie, was Sie zu tun versuchen:
1. Denken Sie an die alten Preis
2. Ändern Sie den aktuellen Preis für eine neue
Da diese sind die zwei Schritte, was Sie tun möchten, müssen Sie halten Sie in der eine Funktion. Sie müssen zuerst daran denken, was der aktuelle Preis ist (in diesem.oldprice), und dann ändern Sie den aktuellen Preis (dieser.Preis). Die Antworten von RoBorg und cherouvim der code, dies zu tun.
Um erste-off bin ich mir nicht so sicher, dass Sie tun, OOP Javascript korrekt. OOP in Javascript nicht Objekt orientiert Programmieren zu beginnen, und es funktioniert aus so genannten Prototyp statt:
Zum Beispiel:
Und das würde bis Ihr Konstruktor.
Als Nächstes müssen wir einige Methoden, so dass Ihre alten Werte gespeichert werden können:
Und Sie würden schreiben Sie eine Methode, wie Sie dies für jede Eigenschaft in Ihrem Fleisch.
da Sie gerade erst mit OO-javascript, hören Sie sich diese Ratschläge:
dont verwenden Sie das Schlüsselwort new, um Objekte zu erstellen. mithilfe der funktionellen Vererbung statt. Auf diese Weise können Sie leicht private Variablen, und ich denke, die syntax ist viel einfacher. check it out:
können Sie mithilfe der oben wie diese:
nun werden Sie vielleicht brauchen, getName und setName-Methode etc. wenn Sie möchten, Vererbung, können Sie etwas wie das hier tun:
sowieso, ich habe vielleicht beantwortet die falsche Frage, aber vielleicht werden Sie es Lesen und sehen das Licht 🙂
this
.gibt es keine get/Set-Methoden oder-operator überladen in JS (noch), so dass Sie wirklich brauchen, um eine Funktion schreiben, die legen den Preis fest und erhalten Sie diese tolle Seite-Effekte.
Sind Sie überschreiben Ihren Preis variable. Vergessen Sie nicht, dass in javascript, können Sie etwas zu einer variable, da es nicht stark typisiert. So, wie Sie es eingerichtet haben:
Können Sie (wie erwähnt) verwenden, Getter und setter, vorausgesetzt, Sie brauchen keine IE-Unterstützung. Andernfalls verwenden Sie die Methode, die Sie definiert:
Da Sie wirklich wollen, zu zwingen, den Zugang zu diesen Werten, würde ich schreiben Getter für Sie: