Javascript 如何创建可在多个级别引用的类/对象

Javascript 如何创建可在多个级别引用的类/对象,javascript,class,object,Javascript,Class,Object,我读过很多很多用javascript制作临时类的方法。我试图创建一个庞大的项目列表,每个项目都有各种变量。我需要能够从这个列表中调用某个对象的属性。 下面的代码可以编译,但当第9行尝试访问items.yspeed1.name时,它会创建名为“undefined”的按钮。我不知道如何像这样在javascript中访问函数的变量 var itemslist = function(){ this.yspeed1 = function(){ this.name = 'Yellow

我读过很多很多用javascript制作临时类的方法。我试图创建一个庞大的项目列表,每个项目都有各种变量。我需要能够从这个列表中调用某个对象的属性。 下面的代码可以编译,但当第9行尝试访问items.yspeed1.name时,它会创建名为“undefined”的按钮。我不知道如何像这样在javascript中访问函数的变量

var itemslist = function(){
    this.yspeed1 = function(){
        this.name = 'Yellow Upgrade';
        this.price = 50;
    }
    this.yspeed2 = function(){
        this.name = 'Blue Upgrade';
        this.price = 25;
    }
}

var newitem = document.createElement('button');
newitem.innerHTML = items.yspeed1.name;
shop.appendChild(newitem);

嗯,对于初学者来说,
yspeed1
是一个
函数
,因此您必须调用它,我认为这可能是您正在寻找的类型

var itemslist = function(){
    this.yspeed1 = {
        name: 'Yellow Upgrade',
        price: 50
    }
}
这只是一种方式。除此之外,您还必须创建一个

new items.yspeed1();

有些情况下,“类”是有用的,但我认为您可以在这里使用一个简单的对象

var items = {}
items.yspeed1 = {}
items.yspeed1.name = 'Yellow Upgrade';
items.yspeed1.price = 50;
items.yspeed2 = {};
items.yspeed2.name = 'Blue Upgrade';
items.yspeed2.price = 25;

var newitem = document.createElement('button');
newitem.innerHTML = items.yspeed1.name;
shop.appendChild(newitem);

在JS中定义具有状态的可重用结构时,可以使用类,也就是说,一个类可能有多个副本(实例)

您所拥有的只是具有属性的单个对象(单个实例)的定义。因此,请使用该Javascript构造:

var itemslist = {
    yspeed1: {
        name: 'Yellow Upgrade'
        , price: 50
    }
    , yspeed2: {
        name: 'Blue Upgrade'
        , price:  25
    }
}
现在有了一个具有两个属性的对象——yspeed1和yspeed2。而这些都有自己的名称和价格属性


如果要扩展该对象,只需将其添加,例如,
itemslist.yspeed3={hello:'world'}

如果您希望使用基于类的方法,这里有一个使用原型的方法

项目类别:

function YSpeedItem(name, price)
{
  this.name = name;
  this.price = price;
}

YSpeedItem.prototype.getName = function()
{
  return this.name;
}

YSpeedItem.prototype.getPrice = function()
{
  return this.price;
}`
主代码

var yspeed1 = new YSpeedItem("Yellow Upgrade", 50);
var yspeed2 = new YSpeedItem("Blue Upgrade", 25);
itemsList = [];
itemsList.push(yspeed1);
itemsList.push(yspeed2);

var newitem = document.createElement('button');
newitem.innerHTML = items[0].getName;
shop.appendChild(newitem);

这里有更多信息

我看不到您在代码中的任何地方调用itemslist类/函数,填充
项的代码在哪里
?类似地,他也不是
新的
“itemslist的存在,因此仅此更改甚至无法解决他的问题。您创建新
yspeed1
的示例还需要应用于他试图引用的初始对象。初始对象是什么?我不明白。
newitem.innerHTML=items.yspeed1.name我的错。这里他正在访问
项目
而不是
项目列表
,所以我想我们可以假设他已经是
新的
。很抱歉,这对我想做的很有效。我不知道不使用函数是可能的。