JavaScript:使用不带对象对象的函数返回的对象
问题描述:
我是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;
};
答
使用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);
答
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));
}
答
您可以使用自毁分配声明全局或局部范围的变量
//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);
}
答
除了“Bob”应该在引号中的事实,它对我来说工作得很好。
var player_info = makeNewPlayer('Bob', 100);
,然后我能够访问它就好像这样:
player_info.name
player_info.score
答
您可以使用里面的函数的临时构造函数:
function makeNewPlayer(name, score){
const Player = function(name, score){
this.name = name;
this.score = score;
};
return new Player(name, score);
}
您也可以使用外部函数而不是嵌套函数。
答
在不改变你的函数,我能够得到的输出的方式,你希望它
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);
片断如果我不知道该函数将创建多少个对象? 假设有一个for循环让score_1,score_2等,我该如何处理? –
在这种情况下,您所关心的是找到合适的收集对象。在大多数情况下,Array是一个不错的选择,例如,让我们将其命名为玩家。在for循环中,只需调用players.push(newPlayer)即可将新创建的播放器添加到该阵列中。 – tibetty