在JavaScript中动态地将一个对象添加到另一个对象

时间:2015-02-17 16:18:57

标签: javascript jquery

当用户选择某个值时,我有一个对象需要添加另一个对象。该对象是一个持有基本信息的玩家对象,我还有一个武器对象,其中包含有关武器的信息。当用户选择要使用的武器时,我想将武器对象添加到玩家对象中,如果用户选择不同的武器,我想删除之前的武器对象并添加新的武器对象。这可能吗?是否就像将值推入数组一样?

HTML

<select>
    <option></option>
    <option>Sword</option>
    <option>Axe</option>
    <option>Hammer</option>
</select>

JS

var Player = {
    name: "One",
    weapon:
}

var Sword = {
    type: "Bronze",
    speed: 1.25,
    min_damage: 15,
    max_damage: 20,
    str_required: 15,
    gems: "",
    hilt: "",
    blade: "",
    inscriptions: "",
    runes: ""
}

var Axe = {
    type: "Bronze",
    speed: 1.5,
    min_damage: 25,
    max_damage: 28,
    str_required: 25,
    gems: "",
    hilt: "",
    blade: "", 
    inscriptions: "",
    runes: ""
}

var Hammer = {
    type: "Bronze",
    speed: 2.5,
    min_damage: 45,
    max_damage: 60,
    str_required: 55,
    gems: "",
    hilt: "",
    blade: "", 
    inscriptions: "",
    runes: ""
}

$("select").on("change", function(){
    var selected_weapon = $(this).val();

    if(selected_weapon == "Sword"){
        Player.weapon = Sword;
        $("#content").append(Player);
    }
    else if(selected_weapon == "Axe"){
        Player.weapon = Axe;
        $("#content").append(Player);
    }
    else if(selected_weapon == "Hammer"){
        Player.weapon = Hammer;
        $("#content").append(Player);
    }
});

2 个答案:

答案 0 :(得分:0)

在JS中相互添加现有对象非常容易。

在您的情况下,Player.weapon = Sword;

那会给你

Player = {
    name: "One",
    weapon: {
        type: "Bronze",
        speed: 1.25,
        min_damage: 15,
        max_damage: 20,
        str_required: 15,
        gems: "",
        hilt: "",
        blade: "",
        inscriptions: "",
        runes: ""
    }
}

我建议为每个武器对象添加name键。现在当你看到我上面发布的Player物体时,你不知道它有哪种武器。因此,只需添加name: 'Sword'即可在以后根据需要引用它。

答案 1 :(得分:0)

是的,你会将玩家选择的武器存放在空阵列中......

var Player = {
    name: "One",
    weapon: []
}

......然后将武器推入阵列。

Player.weapon.push({ name: 'Sword', obj: Sword });

如果你想在添加新武器之前清空阵列,你可以这样做......

Player.weapon.empty();

...或

Player.weapon = [];

你可以......

Player.weapon = Sword

...但是你的玩家只能选择一种武器。如果你这样做,我会这样做......

Player.weapon = { name: 'Sword', obj: Sword };

...或在武器对象上存储名称属性。

希望有所帮助