【问题标题】:ReferenceError from a JavaScript function that is defined correctly?来自正确定义的 JavaScript 函数的 ReferenceError?
【发布时间】:2011-08-15 12:53:24
【问题描述】:

我已将自己声明为一个名为“breakdown”的 JavaScript 对象。

然后我借用了我在 jQuery extend() 文档中找到的一个函数,该函数在不同的页面上运行良好,但设置相同 - 奖励对象而不是故障。

breakdown = {};

breakdown.printObj = function(obj) { 
    var arr = []; 
    $.each(obj, function(key, val) { 
        var next = key + ": "; 
        next += $.isPlainObject(val) ? printObj(val) : val; 
        arr.push( next ); 
    }); 
    return "{ " +  arr.join(", ") + " }"; 
} 

然后我尝试像在其他页面上一样使用它来查看我的“类别”数组中的内容:

breakdown.getPointsBreakdown = function(categories, transactions) {

    alert( breakdown.printObj(categories) );

如果我改为“键入”该警报,它会显示“对象”。如果我提醒“categories[1].Title”,它会显示“Good Behaviour”,因此该数组正在正确地传递给该函数中的 categories 变量。

但是,当我使用“breakdown.printObj”时,我在 FireBug 中收到以下错误:

ReferenceError { message="printObj is not defined", fileName="https://frog.ashingtonh...7fa8452ccb3e94ba89e487a", more...}

我不明白怎么做!

【问题讨论】:

  • 你在哪里提醒'breakdown.printObj'?在你的 .each 里面?就在您的方法符号下方?另外,你是不是“varring”故障并且你刚刚将它声明为“breakdown = {};”为了你的例子?例如,它是否在您的实际代码中声明为“varbreak = {};”?
  • 顺便说一句,你为什么不直接使用 JSON 序列化器?

标签: javascript jquery javascript-objects


【解决方案1】:

改变

    next += $.isPlainObject(val) ? printObj(val) : val; 

到:

    next += $.isPlainObject(val) ? breakdown.printObj(val) : val; 

【讨论】:

  • 谢谢,工作愉快。仍然不明白它在我的其他脚本中是如何工作的(直接 c&p)! :)
  • 另一个脚本一定在某处定义了printObj函数。
【解决方案2】:

您可能应该在第 6 行使用 breakdown.printObj(val) 而不仅仅是 printObj(val)

【讨论】:

    【解决方案3】:

    改变

    breakdown.printObj = function(obj) { 
        // snip...
    };
    

    breakdown.printObj = function printObj(obj) { 
        // snip...
    };
    

    这样你就可以递归调用它。

    这叫named function expression

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多