私はこのようなファクトリパターンを使用することができます。作るコンストラクタの引数特権ES5で
function factory(a) {
return {
say: function() {
return console.log(a)
}
};
}
var instance = factory('hi');
instance.say(); // => 'hi'
instance.a; // => 'undefined'
それはへの特権であるように、工場出荷時に渡される引数は、それが作成するオブジェクトに設定されていませんすべてのメソッド定義は作成者に公開されていません。
私はこの工場をES6クラスにしたいのですが、どのようにして同じ方法でコンストラクタパラメータを表示できますか?
let hack;
class Blah {
constructor(a) {
//bad!
this.a = a;
//but even worse?
hack = a;
//instance method is not a class method
this.yell =() => console.log(a);
}
say() {
console.log(hack);
}
}
let blah = new Blah('hi');
blah.a; // => 'hi'
blah.hack; // => 'undefined'
blah.say(); // => 'hi'
blah.yell(); // => 'hi'
[この記事では](http://www.2ality.com/2016/01/private-data-classes.html)にはいくつかの選択肢がありますが、私は基本的にdecezeに同意します。あまりにも心配です。 :Pたとえば、Pythonにはprivateメンバーはまったくありません。それは慣習を使うだけで、うまくいっている。 – Amadan
@Amadan Pythonはまさに私の考えを以下に説明しました。 *私たちはすべてここに大人に同意しています、私の秘密に触れてはいけません "*そのような重要な教訓です... – deceze