编辑:我最终从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());
编辑:看来我的问题的答案是不相干的。我真的对工厂不感兴趣,实际上宁愿不使用 if。我的问题是关于私人国家的。从 Bergi 的回答和评论中,我想我可以把一些东西放在一起。
待续...
编辑:Bergi 已经开始回答下面的问题,但忽略了最重要的部分——私有状态。
我有时间更多地考虑这个想法,但是如果没有某种工厂,我仍然无法使用 Object.create() 实现私有状态。但我想错了,Bergi 提到了一个解决方案......随意以 Bergi 的回答为起点。
原文:我对避免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 不是我的第一语言。