REALプライベートメソッドINSIDE ES6クラスがあります。しかし、私はちょっと遊んでいて、良いことを発見しました。おそらく...情報漏えいのないnodejs専用環境のES6モジュール/クラスで '実際の'プライベートメソッドを定義する
私は、オブジェクトのプロパティを公開しないことはできません。だから私は、クラスをインポートすることができます
class MyClass {
constructor() {
/**
* Initialize stuff...
*/
}
myMethod() {
/**
* Do public stuff...
*/
}
}
// expose class to environment.
export default MyClass;
:の
import MyClass from './MyClass.js';
をしかし、私は、私は別々のファイルに私のクラスを分割し、その後のようなこれらのクラスをエクスポートして、ややOOPプログラミングの達成しようとしましたコースmyMethod
は、モジュールをインポートした他のファイルからアクセスできます。今、あなたはプライベート変数とプライベートメソッドにアクセスすることはできません
// private variable outside of class scope but still accessible.
let possiblePrivateVariable = 'am I a private variable?';
class MyClass {
constructor() {
/**
* Initialize stuff...
*/
}
myMethod() {
// run private method.
console.log(_possiblePrivateMethod());
// show private variable.
console.log(possiblePrivateVariable);
}
}
// private function outside of class scope but still accessible.
function _possiblePrivateMethod() {
return 'am I a private method?';
}
// expose class to environment.
export default MyClass;
:
// Import class to newFile.js and use it.
import MyClass from './MyClass.js';
const exposedClass = new MyClass();
exposedClass.possiblePrivateVariable; // -> undefined.
exposedClass._possiblePrivateMethod(); // -> undefined.
exposedClass. myMethod(); // -> logs: am I a private method?
// am I a private variable?
ことがある私は、私はこれを試してみたクラスによってアクセス可能beeingて変数や関数を必要としていたSinced私は彼らに「export
」という言葉を公開していないので、それらは「プライベート」のように感じていることが明らかです。私の質問は、このメソッドがプライベート変数とメソッドを作成すると考えられるかどうかです。また、コードを実行しているときに表示された方法で他に漏れが発生する可能性がありますか?
よろしく、 Megajin
追記:それはNodeJSのみの環境であるため、私は、ブラウザのサポートを必要としません。 NodeJS v8.1.4
を使用しており、npm start
スクリプトにbabel
を使用していますので、をTypeError
なしで使用することができます。
私は、この質問が重複とみなされる可能性があることを認識していますが、この質問はクラス内のプライベートプロパティ、変数、メソッドについてではありません。
まあ、はい、しかし...その "プライベート"変数は、クラスのすべてのインスタンス間で共有されています。潜在的にいくつかの独立したインスタンスを持つクラスを持つという目的を破るものです。あなたはそれを(非)グローバル変数に減らしました。 – deceze
これらはメソッドではなく、インスタンスの一部ではありません。それらは静的な関数であり、モジュールのローカルな変数です。どちらがいいですか、あなたが探していたものではない可能性が最も高いです。 – Bergi
@deceze同じクラスのインスタンスが2つある場合、変数はお互いに上書きされますか? – Megajin