【问题标题】:How can I return an array from an object key value in JavaScript?如何从 JavaScript 中的对象键值返回数组?
【发布时间】:2012-01-14 20:14:15
【问题描述】:

所以我有以下代码:

var structures = {

    loginStructure : function(){

        return structure = [
            '<form name="',opts.formClass,'" class="',opts.formClass,'" method="post" action="#">',
                '<fieldset class="',opts.fieldsWrapper,'">',
                    '<fieldset class="',opts.userWrapper,'">',
                        '<label for="',opts.userInt,'" class="',opts.userLbl,'"><img src="',opts.userIcon,'" alt="',opts.userName,'" /></label>',
                        '<input type="text" name="',opts.userInt,'" class="',opts.userInt,'" placeholder="',checkNameLenght(opts.userName,namesLenght.userNameLenght,16,'Username'),'" value="" autocomplete="off" />',
                    '</fieldset>',
                    '<fieldset class="',opts.passWrapper,'">',
                        '<label for="',opts.passInt,'" class="',opts.passLbl,'"><img src="',opts.passIcon,'" alt="',opts.passName,'" /></label>',
                        '<input type="password" name="',opts.passInt,'" class="',opts.passInt,'" placeholder="',checkNameLenght(opts.passName,namesLenght.passNameLenght,16,'Password'),'" value="" autocomplete="off" />',
                    '</fieldset>',
                    '<fieldset class="',opts.btnWrapper,'">',
                        '<button type="submit" name="',opts.btnInt,'" class="',opts.btnInt,'">',checkNameLenght(opts.btnName,namesLenght.btnNameLenght,7,'Login'),'</button>',
                    '</fieldset>',
                '</fieldset>',
                '<div class="toogle-button">',
                    '<ul class="inside">',
                        '<li class="toogle"><a><img src="assets/gfx/toogle.png" alt="Back" /></a></li>',
                    '</ul>',
                '</div>',
            '</form>',
            '<div class="toogle-buttons">',
            '</div>'
        ];
    }

}

这返回(如果我这样做 console.log(structures.loginStructure))只是一个 function()。有没有办法让它返回我在那里的实际数组?

它的目的是将多个数组定义为对象键,如果可以返回这样的东西,因为它看起来更容易。或者有更好的方法吗?

【问题讨论】:

  • 顺便说一句,这与 jQuery 无关 - 但将其标记为表明您可能正在使用 jQuery - 这可能暗示其他人提供依赖于 jQuery 的回答。
  • 是的,我也在用jQuery,其实这段代码是一个jQuery插件的一部分。
  • 如果所有变量都正确定义,这里似乎可以正常工作:jsfiddle.net/jfriend00/ekZVE.
  • @jfriend00 确实如此。我有以下 jQuery 插件结构:jsfiddle.net/3fbZq/1,并且 opts 是在 $.fn.loginsys.defaults = { ... } 中定义的。如果我运行 console.log() 操作,则在当前状态下不会显示任何内容。如果我让该对象返回一个函数,因为答案的第一部分说它显示为我在控制台中描述的function()。所以也许我的插件结构有问题,这就是它不能正常工作的原因。如果您不介意,可以查看jsfiddle.net/3fbZq/1 并告诉我出了什么问题。
  • @Roland - 我做了你的小提琴,所以它实际上会运行和执行,当我这样做时,它会给出错误,指出 namesLenght 对象未定义,因此它中止。另外,您是否意识到正常的拼写是namesLength 而不是namesLenght。您可以在此处查看可运行版本和错误:jsfiddle.net/jfriend00/rdbfU

标签: javascript jquery arrays object


【解决方案1】:

你想要:

structures.loginStructure();

structures.loginStructure 只是简单地返回对函数的引用,而不是执行函数并返回其结果。将()添加到它的末尾以执行它并返回它的结果。

或者,也许更好,不要把它写成一个函数。只需声明loginStructure: ['&lt;form name...。基本上,只需删除function(){return structure =。这里需要注意的一个显着区别是 opts 的任何值都会被立即评估,而不是推迟到稍后执行 then 函数 - 所以请不要盲目地更新你的代码。

【讨论】:

  • 而不是',opts.formClass,''+opts.formClass+' ?
  • 我试过了,但我的代码在哪一行有一个错误 return this.each(function() { ....... ,为什么?
  • @Roland - 我认为我们需要查看更多代码才能准确回答这个问题,我认为这可能适合新问题。
  • 抱歉,这是我的错,我忘记从我之前的funtion(){ ... 末尾删除}。现在很好,但是如果我这样做console.log(structures.loginStructure),现在什么都不会发生,我想看到那个数组,不是吗?
  • 此答案不再与问题的当前状态相关(编辑后)。
猜你喜欢
  • 2017-08-10
  • 2021-12-16
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 2021-01-22
相关资源
最近更新 更多