ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript でプロトタイプ定義された関数からプライベート変数にアクセスするにはどうすればよいでしょうか?
JavaScript 関数定義のアクセス制限
JavaScript では、関数への変数のアクセス可能性は、関数が定義されているスコープによって異なります。コンストラクター内で宣言されたプライベート変数には、そのコンストラクターのスコープ内の関数のみがアクセスできます。これは、プロトタイプ プロパティの使用など、コンストラクターの外部で関数が定義されている場合に制限が生じます。
プロトタイプ定義の関数とプライベート変数
次のコードを考えてみましょう。 TestClass にはプライベート変数 privateField があります:
TestClass = function(){ var privateField = "hello"; this.nonProtoHello = function(){alert(privateField)}; }; TestClass.prototype.prototypeHello = function(){alert(privateField)};
この例では、コンストラクター内で定義された nonProtoHello は privateField にアクセスできますが、プロトタイプを使用して定義された PrototypeHello はアクセスできません。これは、プロトタイプで定義された関数がコンストラクターのスコープ内で定義されていないためです。
プライベート変数アクセスのオーバーライド
プロトタイプで定義された関数を直接許可することはできません。プライベート変数にアクセスします。これは基本的に逆スコープ メカニズムを作成しますが、これは JavaScript ではサポートされていません。
代替: Getters と Setters
プロトタイプ定義関数でプライベート変数を操作できるようにするには、次のようにします。このオブジェクトを使用して、コンストラクター内でゲッターとセッターを作成できます。これらのパブリック メソッドはプライベート変数にアクセスし、プロトタイプ関数によってプライベート変数を変更できるようにします。以下に例を示します:
function Person(name, secret) { // public this.name = name; // private var secret = secret; // public methods have access to private members this.setSecret = function(s) { secret = s; } this.getSecret = function() { return secret; } } // Must use getters/setters Person.prototype.spillSecret = function() { alert(this.getSecret()); };
以上がJavaScript でプロトタイプ定義された関数からプライベート変数にアクセスするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。