EDIT: Я понял это из ответа Берги в конце.Как создать объект с частными членами, используя Object.create() вместо нового
Спасибо, Берги.
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: Кажется, ответы на мой вопрос отключены по касательной. Я действительно не интересуюсь фабрикой и фактически не буду использовать, если. Мой вопрос касается частного государства. Из ответов и комментариев Берги я думаю, что могу что-то собрать.
Продолжение ...
EDIT: Берги начал отвечать на вопрос ниже, но оставил самую важную часть - личное состояние.
У меня было время подумать над идеей больше, но я все еще не могу достичь частного состояния, используя Object.create() без какой-либо фабрики. Но я хочу быть неправ, и Берги намекнул на решение ... Не стесняйтесь взять ответ Берги в качестве отправной точки.
ОРИГИНАЛ: Мои старания избегать new
в javascript привел меня в своеобразное место. Я хочу, чтобы члены частного объекта, но я не хочу отказываться от Object.create()
.
Вот код.
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();
И jsfiddle
http://jsfiddle.net/dsjbirch/Wj6cp/10/
Would init
быть более идиоматических/подходящее название для метода factory
?
Это безумие?
Be kind - javascript - это не мой первый язык.
Почему вы не хотите использовать 'new'? –
Douglas crockford. – bluekeys
Это несчастливо. –