Ich brauche einige einfache Objekte, die später mit vielen verschiedenen Eigenschaften komplexer werden könnten, also dachte ich an Dekorationsmuster. Ich habe dies bei Crockford Macht Konstruktor und Objektvergrößerung suchen:Ist das ein gutes Dekorationsmuster für Javascript?
//add property to object
Object.prototype.addProperty = function(name, func){
for(propertyName in this){
if(propertyName == name){
throw new Error(propertyName + " is already defined");
}
}
this[name] = func;
};
//constructor of base object
var BasicConstructor = function(param){
var _privateVar = param;
return{
getPrivateVar: function(){
return _privateVar;
}
};
};
//a simple decorator, adds one private attribute and one privileged method
var simpleDecorator = function(obj, param){
var _privateVar = param;
var privilegedMethod1 = function(){
return "privateVar of decorator is: " + _privateVar;
};
obj.addProperty("privilegedMethod1", privilegedMethod1);
return obj;
}
//a more complex decorator, adds public and private properties
var complexDecorator = function(obj, param1, param2){
//private properties
var _privateVar = param1;
var _privateMethod = function(x){
for(var i=0; i<x; i++){
_privateVar += x;
}
return _privateVar;
};
//public properties
var publicVar = "I'm public";
obj.addProperty("publicVar", publicVar);
var privilegedMethod2 = function(){
return _privateMethod(param2);
};
obj.addProperty("privilegedMethod2", privilegedMethod2);
var publicMethod = function(){
var temp = this.privilegedMethod2();
return "do something: " + temp + " - publicVar is: " + this.publicVar;
};
obj.addProperty("publicMethod", publicMethod);
return obj;
}
//new basic object
var myObj = new BasicConstructor("obj1");
//the basic object will be decorated
var myObj = simpleDecorator(obj, "aParam");
//the basic object will be decorated with other properties
var myObj = complexDecorator(obj, 2, 3);
Ist dies ein guter Weg, Decorator-Muster in Javascript haben? Gibt es andere bessere Möglichkeiten, dies zu tun?
Diese Art der Programmierung scheint ziemlich unbrauchbar und verwirrend für mich, aber vielleicht bin ich der einzige ... – Harmen
Gibt es einen Grund, dieses Muster zu verwenden, außer "diese Objekte können irgendwann in der Zukunft komplexer sein "? – Mathew
Diese Objekte * sind * irgendwann * komplexer *. Also, wenn ich einige Objekte brauche, die einfach sein müssen und andere Objekte, die komplexer sein sollten, möchte ich nicht viele verschiedene Objekte erstellen, ich werde die Komplexität jedes einzelnen Objekts erhöhen, indem ich einige definierte Eigenschaften verwende. Denken Sie an Benutzeroberflächen, wenn Sie für jede unterschiedliche Kombination von UI-Elementen ein anderes Objekt mit einer kombinatorischen Explosion erstellen. Hier könnte Ihnen dieses Muster helfen, Code besser zu gestalten. –