2012-12-25 19 views
9

可能性の重複:さて、このJSに現在のオブジェクトのプロパティを参照する方法

var object = { 
firstname : 'john', 
lastname : 'paul', 
wholename : firstname + lastname 
} 


Self-references in object literal declarations

私は、この例のようにJSでは、いくつかの単純なオブジェクトを持っています単純なことは機能しません。 johnとpaulはwholenameで定義されていないので、私は関数(getWholeName(){return this.firstname+this.lastname})を実行する場合にのみ動作する 'this'演算子を使用しようとしました。 しかし、関数ではなく変数を使用する場合、どうすればよいですか?私もobject.firstname + object.lastnameを試しましたが、うまくいきません。

答えて

11

は、オブジェクトを参照する方法はありませんが、あなたは、動的にプロパティを追加することができます。

var object = { 
    firstname : 'john', 
    lastname : 'paul' 
}; 

object.wholename = object.firstname + object.lastname; 

EDIT:

そして、なぜない機能でラップ?

var makePerson = function (firstname, lastname) { 
    return { 
     firstname: firstname, 
     lastname: lastname, 
     wholename: firstname + lastname // refers to the parameters 
    }; 
}; 

var object = makePerson('john', 'paul'); 
+0

ありがとうございます。なぜ私がこれをやっているのかは、私が構築している巨大なWebアプリケーションでうまく整理されたコードを作成しようとしていることです。私はこのようなオブジェクトで同様の関数と変数を再編成することにしました。これは正しい方法ですか?私はTypeScriptとモジュールについて知っていますが、関数/変数のグループのような単純なものを実現するためにTSを使う必要がありますか? – Rayjax

+2

@ user1397271あなたはplain JSでこれを行うことができます:名前空間(var MYAPP = {}; MYAPP.data = ...のようなもの)を導入し、大きな関数を小さなものに分解してみてください。モジュールパターンの使用を検討してください:http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth – Stefan

+0

var MYAPP = {}のような名前空間を使用すると、これは私の例と同じですvar object = {}で、私が尋ねていた問題にぶつかりますか? – Rayjax

2

Javascriptでは、すべての関数がオブジェクトです。あなたはこのような関数として、あなたのオブジェクトのコンストラクタを宣言する必要があります。

function person(firstname,lastname) 
{ 
this.firstname=firstname; 
this.lastname=lastname; 

this.wholeName=wholeName; 

//this will work but is not recommended. 
function wholeName() 
{ 
return this.firstname+this.lastname; 
} 
} 

あなたは物事の推奨される方法である、aswellを試作して、オブジェクトに余分なメソッドを追加することができます。詳細はこちら

+0

関数...これは何ですか=> 'var obj = {1:1,2:2}'? – charlietfl

+0

あなたは正しいですが、すべての機能はオブジェクトです。それは私が意味するものです。私は訂正しました:) – user1574041

+0

w3schoolsや他のいくつかのウェブサイトからこれを外しましたか? – 0x499602D2

関連する問題