2017-08-16 6 views
0

JavaScript/jQueryの新機能です。関数によってオブジェクトを返す良い方法があるかどうか分かります。JavaScript:オブジェクトのオブジェクトなしで関数によって返されたオブジェクトを使用します。

//this is the Object creator. 
function makeNewPlayer(name, score) { 
    var player = {}; 
    player.name = name; 
    player.score = score; 

    return player; 
}; 

これは機能を使用する方法です。私は、オブジェクトを使用する場合

var player_info = makeNewPlayer('Bob' ,100); 

しかし、私はこのようにそれを呼び出す必要があります:それは愚かに見える

player_info.player.name 
player_info.player.score 

、どのような方法は次のようにオブジェクトを直接使用しますか?

player_info.name 
player_info.score 

編集:私は、関数によって作成されますどのように多くのオブジェクトを知らないとして

。 あなたは、ローカル、グローバルまたはを宣言するために消滅割り当てを使用することができます

function makeNewPlayer(name, score) { 
    var player = {}; 
    player.name = name; 

    for(i=0, i<number_of_score, i++){ 
     eval("player.score_" + i) = score[i]; 
    }; 

    return player; 
}; 

答えて

0

使用new

私はあなたの疑問を解決するために起こったmy blogからいくつかのテキストをコピー:

コンストラクタは、オブジェクトを作成するために使用される特別な機能です:

例:

function StarkIndustries(name, birth) { 
    this.name = name; 
    this.birth = birth; 
} 
var iron1 = new StarkIndustries('iron01', 2017); 
var iron2 = new StarkIndustries('iron02', 2017); 
alert(iron1.name); 
alert(iron2.name); 

結果:

iron01 
iron02 

機能する前に新しい追加することで、関数は、オブジェクトを作成 コンストラクタになっています。

しかし、グローバルオブジェクトwindowを変更しますので、新しいことなく、コンストラクタ として設計された関数を呼び出すことは危険です。だから、コンストラクタ内部の健全性チェックが必要です。

if (!(this instanceof StarkIndustries)) { 
    warn("StarkIndustries is a constructor and should be called with `new`"); 
} 

戻るあなたのコードに、それは次のようになります。

function makeNewPlayer(name, score) { 
    this.name = name 
    this.score = score 
}; 

var iron1 = new makeNewPlayer('iron01', 2017); 
0
function makeNewPlayer(name, score) { 
    return {name, score}; 
}; 

let players = []; 
// in for loop -- sample code only, you need to supply name & score 
{ 
    players.push(makeNewPlayer(name, score)); 
} 
+0

私の場合、以下のスニペットをチェックアウト出力を得ることができていますどのくらいの数のオブジェクトが関数によって作成されるのかわからないのですか? たとえば、score_1、score_2などを作成するためのforループがあるとします。これをどのように処理できますか? –

+0

この場合、適切なコレクションオブジェクトを見つけることが重要です。ほとんどの場合、配列は良い選択肢です。たとえば、プレイヤーの名前を付けましょう。あなたのforループでは、players.push(newPlayer)を呼び出して、作成された新しいプレーヤーをこの配列に追加するだけです。 – tibetty

1

score_2など、score_1を作るためにループのためにそこにあるとしましょう

//this is the Object creator. 
 
function makeNewPlayer(name, score) { 
 
    var player = {}; 
 
    player.name = name 
 
    player.score = score 
 

 
    return player; 
 
}; 
 

 
var player_info = makeNewPlayer("Bob", 100); 
 

 
{ 
 
    let {name: _name, score} = player_info; 
 
    // do stuff with `_name`, `score` 
 
    console.log(_name, score); 
 
}

0

変数スコープ「Bob」が引用符で囲まれていることを除けば、それは私のためにうまくいきます。

var player_info = makeNewPlayer('Bob', 100); 

、その後、私はこのようなうまくそれにアクセスすることができる午前:

player_info.name 
player_info.score 
0

あなたは、あなたの関数の内部で一時的なコンストラクタ関数を使用することができます。

function makeNewPlayer(name, score){ 
    const Player = function(name, score){ 
    this.name = name; 
    this.score = score; 
    }; 

    return new Player(name, score); 
} 

ネストした関数の代わりに外部関数を使用することもできます。あなたの機能を変更せずに

0

、私はあなたがそれ

player_info.name 
player_info.score 

好きな方法が

//this is the Object creator. 
 
function makeNewPlayer(name, score) { 
 
    var player = {}; 
 
    player.name = name 
 
    player.score = score 
 

 
    return player; 
 
}; 
 

 
var player_info = makeNewPlayer("Bob", 100); 
 
console.log(player_info.name); 
 
console.log(player_info.score);

関連する問題