ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript のプロトタイプ定義関数からプライベート メンバー変数にアクセスするにはどうすればよいですか?

JavaScript のプロトタイプ定義関数からプライベート メンバー変数にアクセスするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 03:11:30493ブラウズ

How can I access private member variables from prototype-defined functions in JavaScript?

プロトタイプ定義関数からのプライベート メンバー変数へのアクセス

JavaScript では、コンストラクター内で宣言されたプライベート変数にメソッドから直接アクセスできません。プロトタイプで定義されています。このシナリオは、次のコード スニペットで確認できます。

TestClass = function(){
  var privateField = "hello";
  this.nonProtoHello = function(){alert(privateField)};
};
TestClass.prototype.prototypeHello = function(){alert(privateField)};

// This executes successfully:
t.nonProtoHello()

// This fails:
t.prototypeHello()

この動作は、コンストラクター内で定義されたメソッドが、定義されているスコープにアクセスするため、プライベート変数にアクセスできるために発生します。ただし、プロトタイプ定義のメソッドはコンストラクターのスコープ内で作成されず、そのローカル変数にアクセスできません。

アクセスのニーズへの対処

直接的な方法はありませんが、プロトタイプ定義メソッドのプライベート変数へのアクセスを許可するには、目的の機能を実現する別のアプローチがあります。

  • ゲッターとセッター: このオブジェクトにゲッターとセッターを作成して、プライベート変数への制御されたアクセスを提供します。プロトタイプで定義されたメソッド、およびオブジェクトにアクセスできる他のコードは、これらのゲッターとセッターを利用できます。

次に例を示します:

function Person(name, secret) {
  // public
  this.name = name;

  // private
  var secret = secret;

  // public methods with controlled access
  this.setSecret = function(s) {
    secret = s;
  }

  this.getSecret = function() {
    return secret;
  }
}

// Prototype-defined method using getters
Person.prototype.spillSecret = function() { alert(this.getSecret()); };
  • 間接アクセス: プロトタイプ定義のメソッドはプライベート変数に直接アクセスできませんが、アクセスできるラッパー関数と対話できます。これにより、プライベート変数をプロトタイプに直接公開することなく間接アクセスが可能になります。

要約すると、プロトタイプで定義されたメソッドからのプライベート変数へのアクセスは本質的に制限されていますが、ゲッターとセッターまたは間接アクセスを使用することで柔軟なソリューションが提供されます。これらの変数へのアクセス制御を実現します。

以上がJavaScript のプロトタイプ定義関数からプライベート メンバー変数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。