【问题标题】:How to return an object created in a function?如何返回在函数中创建的对象?
【发布时间】:2017-09-24 03:16:57
【问题描述】:

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

【问题讨论】:

标签: javascript function object return


【解决方案1】:
var gender = prompt("0 or 1");
if (gender === 0) {
if (gender === 1) {

prompt 函数返回一个字符串。结果将从不匹配您的任何if 语句。

您需要比较 "0""1" 而不是 01

【讨论】:

  • 另外,prompt 可以返回 null,该代码未涵盖。
  • @Xufox 我一定会检查的。我只是尽量精简我的例子来展示我想要做什么
  • @Quentin 看起来像!它总是那些简单的事情之一。我应该知道的更好。
【解决方案2】:

当您调用它时,您将全局 Characters 对象设置为等于 CharactersFn 中的一个对象。然后,您还将从 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);

【讨论】:

  • 我会记住这一切的。我唯一不会改变的是你改变的地方是你说我“创建具有引用未定义变量的值的对象”。我想我的描述不够清楚,但这些实际上是其他对象。它们没有在我的示例中定义,因为我想让示例尽可能简单。
猜你喜欢
  • 2022-07-22
  • 2016-08-16
  • 2015-04-23
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多