Ich bekomme nicht wirklich die Funktion von reopenClass von ember.js. Ich dachte, es fügte dem Prototyp des Objekts zusätzlichen Code hinzu, so dass alle Instanzen dieses Objekts die Funktionalität erhielten, die auf nicht-statische Weise hinzugefügt wurde. Es tut dies jedoch nicht. Es sieht so aus, als würde nur Code hinzugefügt, der statisch ausgeführt werden kann. Zum Beispiel. Ich habe diesen Code:Ember.js Wie funktioniert reopenClass?
Logger = Ember.Object.extend({
log: function(thing) {
console.log(thing + ' wassup');
}
});
var logger = Logger.create();
logger.log("1, yo")
logger.reopen({
log: function(name) {
console.log(name + 'ghurt')
}
});
logger.log("2, yo")
Logger.reopenClass({
log: function(name) {
console.log(name + 'fresh')
}
});
logger.log("3, yo")
Logger.log("4, yo")
Es gibt dieses:
1, yo wassup
2, yoghurt
3, yoghurt
4, yofresh
Was ich erwartet war:
1, yo wassup
2, yoghurt
3, yofresh
4, undefined (I think)
Also meine Frage ist: Was ist reopenClass tun und wenn ich verwenden es?
Ok, so Wenn ich das r iight logger.reopen() fügt den Code nur zur Logger-Instanz hinzu, Logger.reopen() fügt Code für jede neue Instanz hinzu, die erstellt wird (vorhandene Instanzen werden nicht geändert) und Logger.reopenClass() fügt Code hinzu, der statisch ist die Logger-Klasse (sie kann nicht von Instanzen, nur statisch aufgerufen werden). Richtig? – koenpeters
Ja, das ist richtig. – pangratz
Ok. Danke für das Licht. Es fiel mir schwer, dies zu verstehen (wie in: Ich habe es nicht verstanden) aus der Dokumentation unter http://emberjs.com/documentation/. – koenpeters