ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript でプロトタイプ定義された関数からプライベート変数にアクセスするにはどうすればよいでしょうか?

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

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 20:16:30830ブラウズ

How can you access private variables from prototype-defined functions in 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 サイトの他の関連記事を参照してください。

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