EDIT: Ich habe es am Ende aus Bergis Antwort herausgefunden.Wie erstellt man ein Objekt mit privaten Mitgliedern mit Object.create() anstelle von
Danke Bergi.
pubPrivExample = (function() {
return {
init : function() {
var private;
this.setPrivate = function (p) {
private = p;
};
this.getPrivate = function() {
return private;
};
},
public : "This is public\n"
};
}());
var a;
a = Object.create(pubPrivExample);
a.init();
a.setPrivate("This is private");
document.write(a.getPrivate());
EDIT: Es scheint die Antworten auf meine Frage sind an einer Tangente aus. Ich bin wirklich nicht an einer Fabrik interessiert und möchte sie lieber nicht benutzen. Meine Frage betrifft den privaten Staat. Aus Bergis Antworten und Kommentaren denke ich, dass ich etwas zusammenziehen kann.
fortgesetzt ...
EDIT: Bergi hat damit begonnen, die Frage unten, zu beantworten, aber den wichtigsten Teil ausgelassen - den privaten Zustand.
Ich hatte Zeit, um über die Idee mehr nachzudenken, aber bin immer noch nicht in der Lage, privaten Zustand mit Object.create() ohne irgendeine Art von Fabrik zu erreichen. Aber ich möchte mich irren, und Bergi hat auf eine Lösung angespielt ... Fühlen Sie sich frei, Bergis Antwort als Ausgangspunkt zu nehmen.
ORIGINAL: Meine Suche zu vermeiden new
in Javascript hat mich zu einem besonderen Ort geführt. Ich möchte private Objekt-Mitglieder, aber ich möchte nicht aufgeben Object.create()
.
Hier ist der Code.
var trackQueue = {};
trackQueue.factory = function() {
var that, queue;
that = this;
queue = [];
that.push = function (item) {
queue.push(item);
};
that.work = function() {
document.write(queue + "<br />");
};
return {
work : that.work,
push : that.push
};
};
var a = Object.create(trackQueue.factory());
a.push("a");
a.push("b");
a.push("c");
var b = Object.create(trackQueue.factory());
b.push("d");
b.push("e");
b.push("f");
a.work();
b.work();
Und ein jsfiddle
http://jsfiddle.net/dsjbirch/Wj6cp/10/
Would init
sein eine idiomatische/geeigneten Namen für die factory
Methode?
Ist das verrückt?
Sei nett - Javascript ist nicht meine Muttersprache.
Warum möchten Sie nicht 'neu' verwenden? –
Douglas Crockford. – bluekeys
Das ist bedauerlich. –