无法从对象内的对象访问数据(javascript)

时间:2015-02-26 01:16:45

标签: javascript object syntax nested

我一直在使用html,css和javascript创建一个口袋妖怪统计计算器供我个人使用。代码主要是有效的,我的问题是基于它的特定部分。

var Natures = { 'Adamant':{'pos':'Atk', 'neg':'SpA'} }

以上是存储自然数据的对象样本(每种性质将一个属性提升10%,将另一个属性提高相同数量)。自然值是具有属性的对象,这些属性表示它们正在增强和减少的统计数据。我的问题是以下代码:

if(Natures.hasOwnProperty(nature)) {
    var plus = eval(Natures.nature['pos']);
    var minus = eval(Natures.nature['neg']);
    base.plus = Math.floor(base.plus*1.1);
    base.minus = Math.floor(base.minus*0.9);
}

if语句位于修改对象( base )并输出其值(6个统计数据中的每一个)的函数内。 if语句检查 Natures 对象是否具有特定的性质(作为函数参数给出的字符串)。

经过一些测试,我确信if语句正常工作。问题在于接下来的两行。它们用于访问自然界的 pos neg 值,并将它们存储为 plus minus 。 eval()就在那里,所以我可以使用 plus minus 来访问和修改 base 的适当值,这些值不是字符串。

我已经检查过,并没有看到我的语法有任何问题。我也确定我已经在上面发布的代码中找到了问题。该函数运行正常 nature 不在 Natures 中。此外,我只是在Chrome(版本40.0.2214.115)中对此进行测试,因此它可能是浏览器。

1 个答案:

答案 0 :(得分:0)

有几个问题:

首先,更改这些行

var plus = eval(Natures.nature['pos']);
var minus = eval(Natures.nature['neg']);
base.plus = Math.floor(base.plus*1.1);
base.minus = Math.floor(base.minus*0.9);

var plus = eval(Natures[nature]['pos']);
var minus = eval(Natures[nature]['neg']);
base[plus] = Math.floor(base[plus]*1.1);
base[minus] = Math.floor(base[minus]*0.9);

其次,除非在其他地方定义了eval('Atk')eval('SpA'),否则{{1}}或{{1}}将无效。