私は、あなたがコンストラクタで使用されるいくつかの関数を持っていると推測しますが、パブリックAPIの一部ではありません。
この場合、1つのオプションは、コンストラクタのプロパティとして単純に格納することです。次に、コンストラクタでそれらを呼び出すときには、.call()
メソッドを使用して、構築中の現在のオブジェクトのコンテキストを設定します。
この方法で、this
を介してパブリックメンバーに自動的にアクセスし、プライベート変数に引数として渡すと自動的にアクセスできます。
var myClass = function() {
this.someprop = 'prop value';
var privVar = 'private value';
myClass.func.call(this, privVar);
};
myClass.func = function(priv){
alert(this.someprop);
alert(priv);
};
var inst = new myClass;
だから、これは単にコンストラクタで使用される関数の名前空間ストレージとしてMyClass
機能を使用しています。コンストラクタはthis
というコンテキストから呼び出すと、this.someProperty
とprivVar
というものが渡されます。
これが後になっているかどうかはわかりませんが、それは1つのオプションです。正しく以下のコメントで@Raynosにより示さ
、MyClass
コンストラクタのような単純な名前空間ストレージに追加されたプロパティは、すべてのプライベートではなく、コンストラクタにアクセスすることができる任意のコードによってアクセスすることができます。
あなたは、いくつかは、それがMyClass
のインスタンスから呼び出されたことを確認するinstanceof
チェックを追加するように、適切に呼ばれることを確保するためにチェックを行うことができますが、このようなチェックは、すべてのセキュアでないと、実際の保護を提供していません。プライベートメンバー。
名前空間は、JSの観点から共有することを前提とした良いアイデアです。また、OOスタイルの継承をエミュレートすることは、JSで使用しようとすると恐ろしいパターンです。固体はおそらくより良いですが、何も完璧ではありません。 – Tracker1
小規模チームメンバー間で共有されるトップレベルの実装では、プライベートメンバーはほとんど無視できますが、分散ユーザーベースの大きなライブラリのようなものはプライベートメンバーの恩恵を受けるでしょう。 –