EDITAR: Al final lo descubrí por la respuesta de Bergi.Cómo crear un objeto con miembros privados usando Object.create() en lugar de nuevo
Gracias 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: Parece que las respuestas a mi pregunta están apagadas en una tangente. Realmente no estoy interesado en una fábrica y en realidad preferiría no utilizarla. Mi pregunta es sobre el estado privado. De las respuestas y comentarios de Bergi, creo que puedo hacer algo juntos.
Continuará ...
EDIT: Bergi ha comenzado a responder a la pregunta de abajo, pero dejó de lado la parte más importante - el estado privado.
He tenido tiempo para pensar en la idea más, pero sigo sin poder conseguir un estado privado usando Object.create() sin algún tipo de fábrica. Pero quiero estar equivocado, y Bergi aludió a una solución ... Siéntete libre de tomar la respuesta de Bergi como punto de partida.
ORIGINAL: Mi búsqueda para evitar new
en Javascript me ha llevado a un lugar peculiar. Quiero miembros de objetos privados, pero no quiero renunciar a Object.create()
.
Aquí está el código.
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();
Y un jsFiddle
http://jsfiddle.net/dsjbirch/Wj6cp/10/
Would init
ser un nombre más idiomática/apropiado para el método factory
?
¿Es esto una locura?
Sea amable - JavaScript no es mi lengua materna.
¿Por qué no quieres usar 'new'? –
Douglas crockford. – bluekeys
Eso es desafortunado. –