我是Javascript的初学者,我正在尝试为练习制作基于文本的游戏。我为敌人制造了这样的物品:
export const spider = {
strength: 1,
health: 4,
gold: 1
};
我现在正在尝试创建一个函数,可以在字段中输入其名称时搜索其统计信息。它看起来像这样:
export const findStats = (target) => {
return target.health;
}
然而,当我这样做并测试时,我得到'未定义'。但是,如果我用'spider.health'替换'target.health',它就可以正常工作。
当我尝试使用findStats(“spider”)时会发生错误,这会给我“未定义的结果”。
任何帮助将不胜感激。注意:我确实环顾了这个网站,但发现线程太复杂或者不是我想要的。我是一名初学者,所以非常感谢! 感谢您的所有意见!
我的问题与右边的问题不同,因为当我尝试使用我的代码时仍然会返回'undefined'。这是我刚刚尝试使用其他线程的代码。请记住,我是一个初学者,所以我可能做错了,但如果你能帮助我,我会非常高兴。
export const findLocalStats = (target) => {
var bar = 'strength';
console.log(target[bar]);
}
这是我的测试命令:
expect(findLocalStats("spider")).toEqual(1);
此外,当我在编辑器中尝试使用JSFiddle编写的代码时,它仍然在终端中给出了相同的错误,即'undefined'。
export function findStats(target) {
return target.strength;
}
测试命令:
expect(findStats("spider")).toEqual(1);
确切的错误消息:
findStats()给出了所需目标的统计数据。
expect(received).toEqual(expected)
Expected value to equal:
1
Received:
undefined
Difference:
Comparing two different types of values. Expected number but received undefined.
对不起,如果这非常繁琐。 注2:我之前发布过这个问题但是我已经改变它以试图更好地解释我的问题,因为我仍然不理解我给出的答案和重复问题的链接 - 我试图复制。此外,我给出的副本是不同的。它使用对象作为关键字,但是我想将它用作参数的输入,这样如果有意义的话,它对于多个敌人来说是通用的。谢谢!
答案 0 :(得分:1)
当您调用这样的findStats:findStats("spider")
时,您将函数作为参数发送给该函数。这就是为什么当它试图获取属性健康时,它说未定义。
您需要为该函数提供 spider 对象的实例。要创建实例,您可以使用 Object.create()方法,例如var killMe = Object.create(spider)
。这将基于您之前声明的对象创建一个新对象。然后你可以这样调用你的函数:findStats(killMe)
你可以在这里找到一个例子:https://jsfiddle.net/10ex1xqt/