Javascript对象在数组内丢失类型

时间:2015-09-24 08:04:37

标签: javascript

    /* Game */
    function Game() {
        return {
            items: []
        }
    }

    /* Item */
    function Item(id, name, description, image, price) {
        return {
            getId: function () {
                return id;
            }
        }
    }

    Item.prototype.toString = function() {
        return id + ":" + name;
    };

    /* Logic.. */
    var game = new Game();
    var sword = new Item(1, "Sword", "An iron sword", "sword.png", 10);
    game.items.push(sword);


    console.log(game.items[0] instanceof Item); // false
    console.log(typeof game.items[0]);          // object
    console.log(game.items[0]);                 // Object{}

我有一种感觉,因为我的自定义对象进入一个数组,他们失去了自定义类型',在这种情况下Item,当我把它们拉出来时。 如何保留Item列表并让Javascript找出其真实类型?

1 个答案:

答案 0 :(得分:4)

构造函数返回普通对象。构造函数可以做到这一点,但IMO不应该这样做。

您可以像这样更改构造函数:

global l

现在它应该像你期望的那样工作。

与此问题没有直接关系,只是一个提示(因为我说在JavaScript中定义/* Game */ function Game() { this.items = []; } /* Item */ function Item(id, name, description, image, price) { this.id = id; } // this is very uncommon in JavaScript, looks more like Java Item.prototype.getId = function () { return this.id; }; Item.prototype.toString = function() { return this.id + ":" + this.name; }; 非常罕见);

在现代JavaScript中,您不必定义显式的get / set函数。相反,您通常直接访问该属性(如Java中的公共成员)。如果在访问属性(读/写)时必须应用某些逻辑,则可以定义一个透明调用的函数(参见Object.defineProperty):

getId