如何返回函数中创建的对象?

时间:2017-04-26 15:47:22

标签: javascript function object return

如果我的头衔以任何方式令人困惑,我道歉。我正在试图弄清楚如何正确地做到这一点。我正在尝试创建一个关键对象:值是其他对象。请参阅下面的代码。我正在使用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;
}

2 个答案:

答案 0 :(得分:4)

var gender = prompt("0 or 1");
if (gender === 0) {
if (gender === 1) {

prompt函数返回字符串。结果将永远匹配您的if语句。

您需要与"0""1"进行比较,而不是01

答案 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);