【问题标题】:How to make JavaScript objects more readable/navigable?如何使 JavaScript 对象更具可读性/可导航性?
【发布时间】:2013-06-20 16:43:59
【问题描述】:

我正在创建一个包含一堆嵌套对象的对象。在使用网络检查器时,我经常不得不重新定位自己,因为所有这些对象都被简单地称为Object。我的对象树的精简版本如下所示:

v Object
    v fields: Array[3]
        v 0: Object
            v fields: Array[2]
                v 0: Object
                    name: 'name'
                    placeholder: 'name'
                    tag: 'input'
                    type: 'text'
                > 1: Object
            name: 'name'
            tag: 'fieldset'
        > 1: Object
        > 2: Object
    name: 'name'

这很快就会变老。有什么方法可以使它更具可读性/可导航性?如果是这样,它是否有效?像这样:

v form
    v fields: Array[3]
        v 0: fieldset
            v fields: Array[2]
                v 0: input
                     name: 'name'
                     placeholder: 'name'
                     tag: 'input'
                     type: 'text'
                > 1: textarea
            name: 'name'
            tag: 'fieldset'
        > 1: fieldset
        > 2: button
    name: 'name'

或者这只是我必须处理的事情?

【问题讨论】:

  • 你的意思是你想要一个 DOM 树吗?
  • 嗯,对象是Objects - afaik 检查员写出.constructors 名称。但我想仅仅为了更容易调试而改变你的代码库并没有多大意义。
  • 不,我正在制作要在服务器端操作的 DOM 树的对象。
  • @Marcus:然后只需检查您正在发送的JSON.stringify(tree, null, 4)。或者,实际上你最好将 DOM 树序列化为 XML 而不是 JSON :-)
  • 完美运行。谢谢!

标签: javascript object web-inspector


【解决方案1】:

如果您想阅读纯文本,可以console.log(JSON.stringify(your_object))

【讨论】:

    【解决方案2】:

    要自动扩展所有属性而不是到处读取ObjectArray[l],一种常见的技术是记录漂亮的JSON 表示。当您的对象在记录后发生变异时,它还具有不会在控制台中更改的好处。你不应该只对非常大的对象执行此操作,并且在循环对象上是不可能的。

    console.log(JSON.stringify(tree, null, 4));
    

    【讨论】:

      【解决方案3】:

      使用命名函数来创建你的对象:

        var a = {foo:"bar"};
        var b = new function myobj() {
          this.foo = "bar";
        }
        console.log(a,b); // Object, myobj
      

      如果你想要可重用的对象,你应该使用

        function myobj() {
          this.foo = "bar";
        }
        var objA = new myobj();
        var objB = new myobj();
        console.log(objA,objB); // myobj, myobj
      

      如果您想深入了解这些差异,请参阅 TJ Crowder 的 this very detailed answer 来回答我的问题。

      【讨论】:

      • 这样做的效率如何?
      • @Marcus:当然它比使用 Object 字面量效率要低得多,但您也可以获得继承。不过,我不建议在纯 data 对象上使用它,例如,这些对象是从简单的 JSON 字符串中解析出来的。
      • @Bergi:当我研究 TJC 答案时,我会将您的 much 替换为 little
      • 目前是 JSON,但稍后会派上用场。谢谢。
      • @JanTuroň:答案是将私有范围变量与公共属性的效率进行比较——两者都是使用构造函数创建的。我的意思是一种无构造函数的方法与一种使用函数调用的方法
      猜你喜欢
      • 2010-12-13
      • 2020-02-20
      • 2019-09-29
      • 1970-01-01
      • 2010-11-29
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      相关资源
      最近更新 更多