【问题标题】:js: return both a first-class object and a string from a variablejs:从变量中返回一个一流的对象和一个字符串
【发布时间】:2025-12-19 00:50:01
【问题描述】:

我已经构建了一个将使用模块的插件。基本上可以添加到代码中以提供附加功能的功能。

插件中有一个函数可以调用这些模块。以前,我是这样称呼他们的:

processInstance($(doc).find('[data-bcp-crumbs]'), crumbs);
processInstance($(doc).find('[data-bcp-copyright]'), copyright);
processInstance($(doc).find('[data-bcp-activenav]'), activeNav);

每行的最后一部分是将在 processInstance 脚本中调用的函数的名称。因此,我将函数的名称作为字符串和每一行的第一类对象。我想把它简化成这样:

for (var i=0; i>module.length;i++) {
    processInstance($(doc).find('[data-bcp-'+module[i].toLowerCase()+']'), window[module[i]]);
}

模块数组被添加到实际模块代码的每个实例之后。我这样做是这样的:

module.push('crumbs');

这不起作用,因为 window[module[i]] 返回未定义。

需要如何修改我的代码才能使其正常工作?

这是一个插入了一个简单模块的整个插件的 jsfiddle 示例:http://jsfiddle.net/michaeljimmy/U8anp/1/

【问题讨论】:

  • 问题是什么?
  • 我在我的问题中添加了实际问题? :)
  • 请贴出所有相关代码!
  • 你能在 JS fiddle 中设置一个例子吗?我会看看它。只是猜测,虽然窗口对象在执行时没有你的 module[i] 属性。
  • 为什么这被否决了?

标签: javascript function simplify first-class


【解决方案1】:

我的一位同事帮我找到了这个问题的答案。不过,首先,我注意到 for 循环中有一个错误。我有 > 而不是

代码的概念是正确的。问题是范围。如果您查看 jsfiddle,您会发现整个东西都在一个外壳中,包括我试图调用的函数。因此,window 无法访问这些功能。我们最终做了一些简单的更改。

首先,我们添加了 module.push('crumbs') 或任何函数名:

functions.crumbs = crumbs;

然后我们不使用window[module[i]],而是使用

functions[module[i]]

没有外壳,window[module[i]] 会正常工作。

【讨论】:

    最近更新 更多