2016-05-16 13 views
0

匿名関数からプライベート変数にアクセスする必要があります。この匿名関数は次によって設定されます。JavaScriptが匿名関数からプライベート変数を読み取る

coolObject = new (function(){ 
    this.public = "public"; 
    var private = "secrets"; 

    // General functions here, no getter or setter for private 
})(); 

私は簡単に読み、console.log(coolObject.public)またはcoolObject.public = "newValue"を行うことによってcoolObject.publicに書き込むことができますが、どのように私はプライベート変数に同じ行うことができますか?もう一つは、コンストラクタにコードを追加できないということです。coolObjectは常にこのように最初に定義されます。

JavaScriptの無名関数からプライベート変数にアクセスする方法はありますか?

編集:私はcoolObject.getPrivate = function(){return private;};を実行してゲッターとセッターを作成しようとしましたが、それは機能しません。

+4

'coolObject'コンストラクタに何も変更しない - いいえ – dotnetom

+2

このような変数は、理由により「プライベート」と呼ばれます。ところで、関数が匿名であるという事実はここでは無関係です。 – nnnnnn

+1

プライベートにしないでください。プライベート変数のポイントと思われるが、そこに意図されたように働いています。 – Spaceman

答えて

2

いいえあなたが持っているコードを変更することはできません。

コードを変更することはできませんが、プライベート変数を読み取ることはできません。 変数をプライベートにする理由は、の範囲外で読み書きできないようにするためです。まったく可能な場合、私的変数の意味と理由が失われます。

+0

何ですか?人々は常にgetterとsetterをprivate変数に作成します。それは決して変数がプライベートである理由を侵すものではありません。 **カプセル化**と呼ばれています。 – 4castle

+0

@ 4castle - はい、オブジェクトの外側から変数自体にアクセスすることはできません。できることはゲッターとセッターを呼び出すことだけです。 (そして、この場合、OPはコンストラクタ関数を変更できないので、getterやsetterを追加できないと言っています) – nnnnnn

+0

@nnnnnn私は、private変数の記述に反対しています。多くの場合、変数へのアクセスを制限するだけではなく、カプセル化のために行われます。それは「理由」と「定義」の違いです。 – 4castle

関連する問題