Hallo,
Naja die Frage war ja nach einer irgendwie gearteten Alternative zum dem Constructor übergeben. Wenn ich nur ein NotificationCenter hätte wäre ja alles sehr einfach weil ich das global zugänglich machen könnte, aber es sind verschiedene.
Ich dachte da an Interitance oder so.
Nein, einfache Attribute.
Nja das ist schon sehr doof, weil ich die dann immer mit dem Constructor übergeben müsste damit sie da zur Verfügung stehen und das ist sehr hässlich. Und in Zukunft wenn ich da noch was dazu machen will dann müsste ich alle Dateien anfassen, das scheint mir eher suboprimal.
Programmiere ab sofort auf der Basis des weltbesten
Ähm "des weltbesten"? Es fällt mir sehr schwehr nach dieser Ankündigung noch weiter zu lesen.
MOP. Akzeptiere keine minderwertigen Objektsysteme!
Du schlägst also die Krücke Klassen in JavaScript nachzubauen? Ne ich denke ich werde wohl darauf verzichten. Wenn ich Klassen benutzen wollen würde hätte ich auch einfach ActionScript 3 nutzen können. Das Projekt dient auch dazu sich mehr mit JavaScript zu beschäftigen, da ist das Klassendenken fehl am platze.
Ich habe mittlerweile von Tim aus dem #selfhtml-Chat einen Lösungsweg aufgezeigt bekommen der mit Object.create() arbeitet.
function Player(name) {
this.name = name;
this.notificationCenter.log("Player " + this.name + " created");
}
function NotificationCenter() {}
NotificationCenter.prototype.log = function(something) {
console.log(something);
}
function Factory() {
this.notificationCenter = new NotificationCenter()
}
Factory.prototype.create = function (constructor /*, args */) {
// Objekt mit dem NC erstellen
var instance = Object.create(constructor.prototype, {
notificationCenter : {
value : this.notificationCenter
}
});
// Konstruktor methode mit den restlichen Argumenten aufrufen.
constructor.apply(instance, Array.prototype.slice.call(arguments, [1]));
return instance;
}
// this is like you use it:
var myFactory = new Factory();
var aPlayer = myFactory.create(Player, "jeena");
// >> "Player jeena created"
aPlayer.notificationCenter.log("logging something");
// >> "logging something"
console.log(aPlayer.name)
// >> "jeena"
Jeena