РЕДАКТИРОВАТЬ :В конце концов я понял это из ответа Берги.
Спасибо Берги.
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());
РЕДАКТИРОВАТЬ :Кажется, ответы на мой вопрос не совпадают.Меня действительно не интересует фабрика, и я бы предпочел не использовать ее. Мой вопрос о частном состоянии. Судя по ответам и комментариям Берги, я думаю, что смогу что-то собрать.
Продолжение следует...
РЕДАКТИРОВАТЬ :Берги начал отвечать на вопрос ниже, но пропустил самую важную часть -частное состояние.
У меня было время подумать над этой идеей, но я все еще не могу получить приватное состояние с помощью 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/
Будет ли init
более идиоматичным/подходящим названием для метода factory
?
Это безумие?
Будьте добры -JavaScript не мой родной язык.