You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Resource是构造函数可正常工作,Building却无法作为构造函数使用?

问题分析:Building构造函数无法正常工作的原因

看你的代码,问题主要出在NewBuilding函数里对Building实例的存储逻辑,以及可能未正确初始化相关变量,具体拆解如下:

1. 错误复用构造函数作为实例存储容器

在NewResource中,你用Res[Resz]存储新的Resource实例——这里的Res应该是你预先定义好的数组(比如let Res = [];),专门用来存放所有资源实例。但到了NewBuilding里,你却写成了Building[Buildz] = new Building(name);,这里的Building是构造函数本身(一个函数对象),而非专门的实例存储容器。

虽然JavaScript允许给函数对象添加属性,但这不是合理的设计;更关键的是,如果Buildz变量没有预先初始化(比如let Buildz = 0;),会直接抛出ReferenceError,连new Building(name)这行实例化代码都无法正常执行。

2. Resource能正常工作的核心原因

Resource可以正常运行,是因为你应该已经正确初始化了Res数组和Resz计数器(比如let Res = []; let Resz = 0;),每次调用NewResource时都是往数组里添加新实例,逻辑完全通顺。

修复方案

给Building实例创建专门的存储数组并初始化计数器,修改NewBuilding函数即可:

// 初始化Building实例的存储数组和计数器(和Resource逻辑对齐)
let Buildings = [];
let Buildz = 0;

function NewBuilding(name) {
  // 往Buildings数组中添加新实例,而非给构造函数添加属性
  Buildings[Buildz] = new Building(name);
  createBuildingBtn(name);
  Buildz++;
}

小建议:变量名尽量语义化一点,比如把Res改成resources,Resz改成resourceIndex,Buildz改成buildingIndex,能大幅提升代码可读性~

内容的提问来源于stack exchange,提问作者Schlauewurst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:26:19