簡體   English   中英

帶有數組或子對象的Javascript OOP構造函數?

[英]Javascript OOP Constructor with array or sub-object?

我是真正的OOP的新手,但我理解javascript還不錯。 我正在嘗試使用構造函數模式創建新對象,但我想將其中一個屬性設置為數組。

這是我要執行的操作的一個示例:

function Walker(name, type, ws, bs, s, armor, i, a, hp) {
    this.name = name;
    this.type = type;
    this.ws = ws;
    this.bs = bs;
    this.s = s;
    this.armor = new Array("f", "s", "r");
    this.i = i;
    this.a = a;
    this.hp = hp;
}

這是一些您可能知道的游戲(並且僅供個人使用,因為創建游戲的公司對自己的IP堅持不懈...)

如您所見, armor屬性將在其中包含3個屬性。 我這樣做的原因是因為已經有一個名為s的屬性,所以我不希望將該屬性與s的盔甲屬性混合使用。

我正在制作一個新的walker並嘗試記錄如下裝甲:

var specificWalker = new Walker("Specific Walker", "Vehicle", 5, 5, 6, [12, 12, 10], 4, 2, 3);

console.log(specificWalker.armor[0]);

但是,這當然是行不通的,因為armor[0]始終等於“ f”,而且我不知道如何覆蓋數組的那部分。

理想情況下,我想做的就是能夠這樣記錄裝甲:

console.log(specificWalker.armor.f) //Should log "12"

但是我不確定如何在對象內部創建對象。

有人可以幫忙嗎?

您只需要創建一個對象,而不是一個數組,就像這樣

this.armor = ["f", "s", "r"].reduce(function(result, current, index) {
    result[current] = armor[index];
    return result;
}, {});

現在, this.armor不是數組,而是對象。 當您打印specificWalker.armor ,您將獲得類似以下內容

{ f: 12, s: 12, r: 10 }

然后您可以按需要訪問f

console.log(specificWalker.armor.f);
// 12

我認為您在構造函數上有這么多參數,我會這樣做:

function Walker(prop) {
    this.name = prop.name;
    this.type = prop.type;
    this.ws = prop.ws;
    this.bs = prop.bs;
    this.s = prop.s;
    this.armor = prop.armor;
    this.i = prop.i;
    this.a = prop.a;
    this.hp = prop.hp;
}

並這樣稱呼它

var walker = new Walker({
    name : "",
    type : "",
    ws : "",
    bs : "",
    s : "",
    armor : [12,12,39],
    i : "",
    a : "",
    hp : ""
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM