如果我的头衔以任何方式令人困惑,我道歉。我正在试图弄清楚如何正确地做到这一点。我正在尝试创建一个关键对象:值是其他对象。请参阅下面的代码。我正在使用Chrome控制台进行测试。
如果我单独执行Characters = CharactersFn("male");
或var Characters = CharactersFn("male");
我可以从CharactersFn()
函数创建对象,但当我尝试通过我的whatAreYou()
函数执行此操作时,我会得到没有结果。我该怎么做呢?
注意:我还在学习,只是想弄清楚如何正确地做事。
var Characters,
valueArr = [],
nameArr = [],
matchArr = [];
var CharactersFn = function (ans) { //Are you male or female?
"use strict";
if (ans === "male") {
Characters = {
47: aloy,
snake: snake,
drake: drake,
cloud: cloud
};
}
if (ans === "female") {
Characters = {
aloy: aloy,
bayonetta: bayonetta,
elizabeth: elizabeth,
ellie: ellie
};
}
return Characters;
};
function whatAreYou() {
"use strict";
var gender = prompt("0 or 1");
if (gender === 0) {
Characters = CharactersFn("female");
}
if (gender === 1) {
Characters = CharactersFn("male");
}
return Characters;
}
答案 0 :(得分:4)
var gender = prompt("0 or 1"); if (gender === 0) { if (gender === 1) {
prompt
函数返回字符串。结果将永远匹配您的if
语句。
您需要与"0"
和"1"
进行比较,而不是0
和1
。
答案 1 :(得分:0)
当您调用CharacterFn时,您将全局Characters对象设置为等于对象。然后,您还将从CharactersFn返回全局Characters对象。然后在你的whatAreYou函数中,你将全局Characters对象设置为CharactersFn的结果(就像我说你已经返回全局Characters对象)。您还创建了具有引用未定义的变量的值的对象,因此我将它们更改为字符串值。另外,如上所述,您对字符串和int值使用了相等比较(===)。如果您使用==那么它会起作用但是使用===时,值必须相同。
这是一个更新版本,它将全局Characters对象设置为我修改过的CharactersFn的结果,以便自己返回对象。
var Characters = {},
valueArr = [],
nameArr = [],
matchArr = [];
var CharactersFn = function(ans) {
if (ans === "male") {
return {
47: "aloy",
snake: "snake",
drake: "drake",
cloud: "cloud"
};
}
if (ans === "female") {
return {
aloy: "aloy",
bayonetta: "bayonetta",
elizabeth: "elizabeth",
ellie: "ellie"
};
}
return Characters;
};
function whatAreYou() {
var gender = prompt("0 or 1");
if (gender === "0") {
Characters = CharactersFn("female");
}
if (gender === "1") {
Characters = CharactersFn("male");
}
return Characters;
}
console.log(Characters);
whatAreYou();
console.log(Characters);