2017-01-25 14 views
0

私はシンプルJS機能javascriptでプライベート関数にアクセスする方法?

var myFunction=function(){ 
    var age=20; 
    this.name="bar"; 
    var show=function(){ 
     console.log(age); 
    } 
} 

インスタンスなどの作成HAVA:

var obj=new myFunction(); 
console.log(obj.show()) 

ログ:this

私はそれを解決できる方法を??私はこれを検索しようとしましたが、解決策が見つかりませんでした。 更新 私はすべてのプライベートメンバーを同じにしておきたいと思います。

var myFunction = function() { 
 
    var age = 20; 
 
    this.name = "bar"; 
 
    
 
    this.show = function() { 
 
    console.log(age); 
 
    } 
 
} 
 

 
var obj = new myFunction(); 
 
obj.show();

+1

'show'はobj''のメンバーではありません。これは 'myFunction'のローカル変数です。 – CollinD

+1

'show.'に' var show'を作成してmyFunctionのインスタンスでアクセスできるようにします – Damon

+0

なぜ 'console.log(obj.show())'をやっていますか? 'show()' *はすでに 'console.log()'を呼び出していませんか? –

答えて

0

はきれいな解決策は、オブジェクトのプロパティとしての機能が公にアクセスできるようになり

var myFunction=function(){ 
var age=20; 
this.name="bar"; 
this.show=function(){ 
console.log(age); 
} 
} 

財産であるためにあなたのショーのVARを変更する

0

にコードを変更してみてください

0

varを使用すると、変数showが宣言され、メンバーはmyFunctionではありません。ここで、さらに情報を探す

var myFunction = function() { 
 
    this.age = 20; 
 
    this.name="bar"; 
 
    this.show = function() { 
 
     console.log(age); 
 
    } 
 
} 
 

 
var obj = new myFunction(); 
 
console.log(obj.name); 
 
obj.show();
best approach to member variables in object-oriented javascript?

3

それはクラスのメンバである場合 ageと同じに、あなたもそれを変更するには、この一つの方法this

を使用する必要がありますあなたのコードの問題は、myFunctionの機能範囲外でshowメソッドにアクセスできないことです。

Javascriptでは、スコープは関数内で定義されています(ES6ブロックスコープを無視します)。したがって、変数の範囲age,name,showが関数内にあります。ただし、thisを使用し、コンストラクタ関数(new)を使用すると、新しく作成されたオブジェクトには、thisキーワードに関連付けられたプロパティが含まれます。あなたのケースでは、nameプロパティのみを新しいオブジェクトに関連付け、show関数をthisに関連付けませんでした。

解決策の1つは、モジュールパターンを使用しています。パブリックに公開されているプロパティをカプセル化するObjectを返すことで、パブリックアクセス可能プロパティを作成できます。あなたの場合、からnameshowメソッドを公開することができます。また、console.logを2回実行する必要もありません。 obj.show()によって出力を得ることができます。それ以外の場合はundefinedとしてログに記録されます。show関数は何も返しません。

var myFunction=function(){ 
 
    var age=20; 
 
    var name="bar"; 
 
    var show=function(){ 
 
     console.log(age); 
 
    } 
 
    
 
    return { 
 
     name : name, 
 
     show : show, 
 
    } 
 
} 
 

 
var obj=new myFunction(); 
 
obj.show()

関連する問題