编辑:最终我从Bergi的答案中弄明白了。
感谢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());
编辑:看起来对于我的问题的回答离题了。我真的不感兴趣使用工厂,而且宁愿不使用。我的问题是关于私有状态的。从Bergi的回答和评论中,我认为我可以总结一些东西。
继续...
编辑:Bergi已经开始回答下面的问题,但是遗漏了最重要的部分——私有状态。
我已经有时间思考这个想法,但是仍然无法在不使用任何类型的工厂的情况下使用Object.create()实现私有状态。但是我希望是错误的,Bergi暗示了一个解决方法...随意以Bergi的答案作为起点。
原始内容:我想避免在JavaScript中使用new
,这使我走上了一条奇怪的路。我想要私有对象成员,但我不想放弃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/
如果把 factory
方法改名为 init
,是否更符合惯用语法 / 更恰当?
这样做疯狂吗?请谅解 - javascript 不是我的母语。
new
? - user1106925