Stellen Sie sich den folgenden Code ein:Javascript: Add-Methode für alle Objekte im Array
$.get("ajax/getColorData.php", function(data) {
this.colorData = data;
});
nun vorstellen, dass der Wert von 'Daten' ist:
this.colorData = [
{
colorName: 'Red',
colorIsInRainbow:true
},
{
colorName: 'Orange',
colorIsInRainbow: true
},
{
colorName: 'Magenta',
colorIsInRainbow: false
}
];
Frage 1
Nachdem ich nun die Daten heruntergeladen habe, möchte ich sagen, dass ich jedem Eintrag im Array eine Methode "colorStartsWithR" hinzufügen möchte. Ich "denke" das, anstatt es auf jedem einzelnen Mitglied des Arrays zu definieren, könnte ich irgendwie diese Methode auf dem Prototyp definieren. Aber ich bin mir nicht sicher, ob ich das tun kann, weil diese Objekte nicht von mir erstellt wurden, sondern von $ .get zurückgegeben wurden, daher ist es für mich nicht klar, ob ich in die richtige Richtung denke.
Frage 2
Und ein bisschen weiter zu nehmen, was passiert, wenn ich eine Eigenschaft an jedes Mitglied des Arrays, speziell hinzufügen wollte:
{
colorName: 'Magenta',
colorIsInRainbow: false,
userClickedThisColor:ko.observable()
}
Auf diese Weise kann ich binden (über knockoutjs) die Liste und ein Kontrollkästchen enthalten. In diesem Fall stelle ich die Frage, ob der Prototyp nützlich sein könnte oder nicht, da jedes Mitglied eine eigene koobservable Eigenschaft erhalten sollte. Ein kurzer Instinkt ist wie etwas zu tun:
for (var i=0;i<this.colorData.length;i++)
{
this.colorData[i].userClickedThisColor=ko.observable()
}
und das funktioniert gut, aber vorstellen, dass es mehr als einen Weg, um eine Liste der Farben abzurufen, oder dass ein Benutzer neue Farb Instanzen erstellen können, und dass die Anpassung, die ich oben gemacht habe, ist komplizierter. Ich müsste jetzt die obige "Add-on" -Logik duplizieren. Gibt es einen klügeren Weg? in stark typisierte Sprachen die meiste Zeit verbracht, manchmal diese Dinge sind nicht so offensichtlich für mich
hat. Vielen Dank für alle Anregungen ...
-Ben
Warum für jedes Objekt die Funktion hinzufügen? Machen Sie einfach eine Funktion, die die Objekte als Parameter akzeptiert. –