【问题标题】:How can I call javascript function using a foreach on a JSON object?如何在 JSON 对象上使用 foreach 调用 javascript 函数?
【发布时间】:2011-02-09 21:41:37
【问题描述】:

我的问题很容易理解。我有一个 JSON 对象(参见代码),我会按照出现的顺序自动调用该对象的所有函数。
.

var installer = {
    a : function() {
          ...
        }
    b : function() {
          ...
        }
};

for(var func in installer) {
    fn.call(document);
};

你知道为什么前面的代码不起作用吗?对不起,我是 javascript 的初学者。

提前致谢!

问候。

【问题讨论】:

标签: javascript callback call


【解决方案1】:

您没有名为 fn 的变量,而且您的函数定义末尾也缺少逗号。

此外,您的函数不会按顺序调用,因为 JavaScript 会任意排序您的对象属性。您可能需要考虑使用数组,或者像我在下面所做的那样,指定一个确定顺序的数组。

var installer = {
    a : function() {
          ...
        },
    b : function() {
          ...
        },
};

var order = [ "a", "b" ];

for(var i = 0; i < order.length; i++) {
    installer[order[i]].call(document);
}

【讨论】:

  • 我假设 document 是 HTML 文档,一个在桌面浏览器的 JavaScript 环境中可用的全局变量
  • 这并不能保证函数会按照定义的顺序执行。
  • 永远不要使用for...in 迭代数组。如果你这样做了,那么变量是数组的索引,而不是值......所以你的代码仍然是错误的。
【解决方案2】:

您将var func 声明为循环遍历installer 成员的变量,但您使用fn.call(...)fn哪里来的?

您是否可以这样做:installer[func].call(document) 而不是 fn.call(document)

您在安装程序对象中声明的函数也不接受任何参数,但您将 document 作为参数传递。

[更新代码将缺少的.call 添加到installer[func](document)]

【讨论】:

  • call 改变了变量this,所以你可以简单地在函数体中使用this 来引用document
  • 谢谢!!没错,这是一个简单的 JS 对象,我可以使用 installer[func](document)。
  • 最后一句不正确。请阅读电话:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…installer[func](document)installer[func].call(document) 是两个不同的语句。
  • 感谢您的评论和链接!你是对的,我错了,现在我用的是 intaller[func].call();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多