Hi
Das ist schon klar, das Problem ist aber wenn ich im Kontruktor Parameter brauche, was dann?
Ihr redet aneinander vorbei!
var obj = function(name) {
this.name = name || 'default';
}
var newObj = object(obj);
var newObj2 = object(obj);
alert( newObj.name + '\n' + newObj2.name );
Nein, er sagt er kann in den meisten Fällen komplett auf Konstruktoren verzichten, und erhalte damit lesbareren Code.
"Objects are mutable in JavaScript, so we can augment the new instances, giving them new fields and methods. These can then act as prototypes for even newer objects. We don't need classes to make lots of similar objects."
Also:
~~~javascript
var object = function(o){function F(){};F.prototype=o;return new F();};
/* Generation 1 */
var obj = {name: "Gen1"};
/* Generation 2 */
var newObj = object(obj);
newObj.name="Gen2";
newObj.identify=function () { return this.name };
/* Generation 3 */
var newObj2 = object(newObj);
newObj2.name="Gen3";
alert( obj.name + '\n' +newObj.identify() + '\n' + newObj2.identify() );
allerdings seine "Zeugungs"-Methode Object.prototype.begetObject ist keine kluge Idee! Jedes assoziative Array hat dann automatisch ein weiteres Element!
Object.prototype.begetObject = function () {
function F() {}
F.prototype = this;
return new F();
};
hash={a:1,b:2};
var out="";
for (i in hash) out+=i+':'+hash[i]+'\n';
alert(out)
Also Finger weg von Object.prototype!!!
Lieber ein eigenes Wurzelobjekt definieren von dem alle "Spezialobjekte" abgeleitet werden.
Hasta la vista
LanX