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

Dynamically adding one object to another in JavaScript

本文关键字:一个对象 添加 动态 JavaScript      更新时间:2024-01-08

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

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

在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',您就可以在以后根据需要引用它。

是的,你会将玩家选择的武器存储在一个空数组中。。。

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

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

希望对有所帮助