2016-05-01 11 views
2

JavaScriptのコンストラクタ関数にプロパティを追加するにはどうすればよいですか?例えば。私は次の機能を持っています。Javascript - オブジェクトコンストラクタ関数にプロパティを追加する方法

function Hotel(name) 
{ 
    this.name = name; 
}; 

var hotel1 = new Hotel('Park'); 

は、私はそれは同じ表記とプライベートであるかのように、キーワード「これ」を使用して、クラス内でローカルに使用することができ、「ローカル」変数を追加することができます。もちろん、作成されたオブジェクトは正しいものを使用できるため、プライベートではありませんか?

このようなことをすることはできますか? thisキーワードを使用するのですか?またはvarキーワード を使用しますか?私は、オブジェクトのコンストラクタ内の関数をしたい場合、私はthis言葉を使用する必要があることを知っている一番下

1. var numRooms = 40; 
2. this.numRooms = 40; 
3. numRooms : 40, 

function Hotel(name) 
{ 
    this.name = name; 
    this.numRooms = 40; 
}; 

に関数コンストラクタの例2を持っています。私が上で尋ねたように、通常の変数に対しても同様に機能しますか?

function Hotel(name) 
{ 
    this.name = name; 
    this.numRooms = 40; 

    this.addNumRoomsPlusFive = function() 
    { 
     return this.numRooms + 5; 
    } 

}; 
+0

これは、スコープが現在のドキュメントに存在する変数を参照します。 Varは変数を宣言し、3番目のポイントは何も行いません。私はあなたがそこにオブジェクトにプロパティを割り当てると思う。これは間違って訂正した –

+0

の割り当て方法ではありません。 –

+0

キーワードvarを使用する代わりにthisキーワードを使用して新しい変数を宣言できるかどうかを知りたいだけです。これはaddNumRoomsPlusFive関数で行われます。補正。私はプロパティを追加する変数を追加していません。 –

答えて

0

通常それはクロージャを使用して行われます:

var Hotel = (function() { 
     var numrooms=40; // some kind of private static variable 

     return function(name) { // constructor 
     this.numrooms = numrooms; 
     this.name = name; 
     }; 
}()); 

var instance = new Hotel("myname"); 
2

あなたのコンストラクタにプライベート変数をシンプル追加することができます。

function Hotel(name) { 

    var private = 'private'; 

    this.name = name; 
}; 

しかし、あなたはnewオペレータなしであなたのHotel機能を使用する場合thisに接続されたすべてのプロパティと関数はグローバルになります。

function Hotel(name) { 

    var 
     private_var = 'private', 
     private_func = function() { 

      // your code 
     }; 

    retur { 

     name: 'name', 
     public_func: private_func 
    } 
}; 

var hotel = Hotel('test'); 

console.log(name); // undefined 

をだからあなたは何のグローバル変数が作成されませんnewオペレータなしHotelコンストラクタを使用する場合:

function Hotel(name) { 

    var private = 'private'; 

    this.name = name; 
}; 

var hotel = Hotel('test'); 

console.log(name); // test 

コンストラクタ関数内でオブジェクトを返すことをお勧めします。これは、戻り値がオブジェクトの場合にのみ可能です。それ以外の場合、オブジェクトではないものを返そうとすると、コンストラクタは通常の動作に戻り、thisを返します。

+0

。これ。演算子はvarと同じですか?その公的変数? –

+0

'var'を使用して関数内に変数を作成すると、自動的にその関数のプライベート(またはローカル)になります。 –

+0

@HugoPereaはJavaScriptクロージャについて読んでいます。彼らはすぐに良い友達になるでしょう。 – evolutionxbox

関連する問題