/* 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找出其真实类型?
答案 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