EDIT: Alla fine ho capito dalla risposta di Bergi.Come creare un oggetto con membri privati usando Object.create() invece di nuovo
Grazie 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: Sembra che le risposte alla mia domanda sono per la tangente. Non sono davvero interessato a una fabbrica e in realtà preferirei non usarlo se. La mia domanda riguarda lo stato privato. Dalle risposte e dai commenti di Bergi penso di poter tirare qualcosa insieme.
To be continued ...
EDIT: Bergi ha iniziato a rispondere alla domanda qui sotto, ma ha lasciato fuori la parte più importante - lo stato privato.
Ho avuto tempo di pensare ancora all'idea, ma non riesco ancora a raggiungere uno stato privato usando Object.create() senza una sorta di fabbrica. Ma voglio sbagliare, e Bergi ha accennato a una soluzione ... Sentiti libero di prendere la risposta di Bergi come punto di partenza.
ORIGINALE: La mia ricerca per evitare new
in javascript mi ha portato in un luogo particolare. Voglio membri di oggetti privati, ma non voglio rinunciare allo Object.create()
.
Ecco il codice.
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();
E un jsfiddle
http://jsfiddle.net/dsjbirch/Wj6cp/10/
Sarebbe init
essere un/nome appropriato più idiomatico per il metodo factory
?
È pazzesco?
Essere gentile - javascript non è la mia lingua madre.
Perché non vuoi usare 'new'? –
Douglas crockford. – bluekeys
Questo è un peccato. –