2017-04-05 15 views
-1
function() { 
    var name; 
    this.set = function(name) { 
    this.name = name; <-- this 
    } 
} 

プライベート変数にパラメータを割り当てるにはどうすればよいでしょうか? Javaとは異なり、「this」も関数を指しているので、私はそれを理解することはできません。Javascriptのプライベート変数とパラメータは同じ名前です

+1

'。不完全で無効なコード例を提供したので、必要なものを正確に知るのは難しいですが、 'name'パラメータが' name'変数をシャドーイングしているという問題があります。もう1つは、変数を設定していないことです。 'this'で参照されるオブジェクトのプロパティを設定しています。 –

+0

外部関数をクラスとして使用していますか? –

答えて

3

の内部にはが設定され、変数nameは変数nameよりも優先されます。外部変数にある値を割り当てるには、内部または外部で別の名前を付ける必要があります。 しかし、あなたは何かなどを行うことができ、

function() { 
    this.name = ''; 
    this.set = function(name) { 
    this.name = name; <-- this 
    } 
} 

これは、オブジェクトのプロパティに値を代入され、プライベート変数に新しい値を代入されていません。

+0

私は別の所有者を表示している間、変数を最もよく記述する名前を保持することができるため、この回答がさらに好きです。 – Sgene9

+1

何ですか?この答えは意味をなさない! 2行目で宣言された変数 'name'を初期化することは決してありません。さらに、' self'変数は 'this'と同じです。それはOPが提供したコードとどのように違うのですか? –

+0

@AaditMShahを修正しました。これはもっと意味がありました。 'function(){ this.name = ''; this.set = function(name){ this.name = name; < - this } } ' –

1

引数として別の名前を使用するだけで、プライベート変数nameがシャットダウンされず、関数setの外側にあることがあります。機能を指していないthis`

var SomeClass = function() { 
 
    var name; 
 
    this.set = function(otherName) { // argument should have a diffirent name so it won't shadow the other variable "name" 
 
    name = otherName; 
 
    } 
 
    this.get = function() { 
 
    return name; 
 
    } 
 
}; 
 

 
var ins = new SomeClass(); 
 
ins.set("Jim Carrey"); // OK 
 
console.log(ins.get()); // OK 
 
console.log(ins.name); // undefined as expected

+0

これは正解です。同意する必要があります。 –

関連する問題