2017-08-16 126 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 

編輯:

由於我不知道有多少對象將被函數創建。 讓我們說有一個for循環,使score_1,score_2等

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

片斷如果我不知道該函數將創建多少個對象? 假設有一個for循環讓score_1,score_2等,我該如何處理? –

+0

在這種情況下,您所關心的是找到合適的收集對象。在大多數情況下,Array是一個不錯的選擇,例如,讓我們將其命名爲玩家。在for循環中,只需調用players.push(newPlayer)即可將新創建的播放器添加到該陣列中。 – tibetty

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);