編集:最終的にベルギの答えからそれを理解しました。
ありがとうベルギ。
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 の答えを出発点として自由に受け取ってください。
ORIGINAL: 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 は私の第一言語ではありません。