javascript中的嵌套对象范围和动态引用

javascript中的嵌套对象范围和动态引用,javascript,Javascript,我最近一直在使用vanilla javascript来帮助自己学习该语言,但我在理解对象“内部变量”是如何定义的以及其他函数可以看到什么方面遇到了一些困难 例如,假设我们有一个gameData变量: let gameData = { resourcesArray: [wood, stone] } “木”和“石”定义为: let wood = { name: 'Wood', amount: '0, } let stone = { name: 'Stone',

我最近一直在使用vanilla javascript来帮助自己学习该语言,但我在理解对象“内部变量”是如何定义的以及其他函数可以看到什么方面遇到了一些困难

例如,假设我们有一个gameData变量:

let gameData = {
    resourcesArray: [wood, stone]
}
“木”和“石”定义为:

let wood = {
    name: 'Wood',
    amount: '0,
}

let stone = {
    name: 'Stone',
    amount: 0,
}
作为对这些变量范围的具体测试,让我们假设在这种情况下有一个这样定义的“农场”建筑

let farm = {
    name: "Farm"
    amount: 0,
    cost: {
        'Wood': 10,
        'Stone': 5,
    },
}
那么,我如何才能按照buyBuilding(building)的思路创建一个函数,将农场对象传递给它,并让它将“农场”成本的名称与resourcesArray中存储的资源正确匹配,并扣除成本

理想情况下,该功能将能够处理未来添加了许多不同资源和成本的“建筑”,这就是为什么我正在寻找一种智能方法来实现这一点,而不只是为每个将要添加的“建筑”硬编码购买功能


提前谢谢

对于每项成本,您必须从全局gameData上下文中扣除金额。。。大概是这样的:

const wood={
名字:“木头”,
金额:500,//开始时有足够的钱来建造东西
}
康斯特斯通={
名字:'石头',
金额:300,//开始时有足够的钱来建造东西
}
常数gameData={
资源雷:[木头,石头],
}
康斯特农场={
名称:“农场”,
金额:0,
费用:{
“木头”:10,
"石头":5,,
},
}
功能建筑(物=农场){
log(`Time to build${thing.name}!`);
Object.keys(thing.cost).forEach(resource=>{
成本金额=物品成本[资源];
log(`*这需要${amount}${resource}…`);
const gameResource=gameData.resourcesArray.find(r=>r.name==resource);
log(``您有${gameResource.amount}${resource}可用。`);
//@TODO在扣除之前检查您是否有足够的资金
gameResource.amount-=金额;
log(现在只剩下${gameResource.amount}${resource},`);
});
log(`newgame state:`,gameData.resourcesArray);
}
//做真实的建筑!

买房(农场)短时间内没有代码。您需要使其更加面向对象,创建父类
资源
。包括函数
扣除成本
。在课堂游戏中,你需要添加功能
buyBuilding
,它将为建筑物计数和从资源中扣除成本提供服务。