【问题标题】:Javascript object programming and object representationJavascript对象编程和对象表示
【发布时间】:2012-09-19 08:59:41
【问题描述】:

场景

当我写下以下代码时,我正在玩一些 Javascript 对象编程(演示 here):

    var o = {
        "key":1,
        "value": 1234,
        toString: function(){
            var res = this.key + ";" + this.value;
            return res;
        }
    };

    var p = {
        "key":2,
        "value": 5678
    };

    document.write(o);
    document.write("</br>");
    document.write(p);

如您所见,使用 toString() 方法可以在不调用 toString() 方法的情况下显示 o object,而将 p object 显示为...是什么?

问题

  1. toString 字面量是对象表示的一种默认名称吗?或者还有什么?

  2. [object Object] 表示法是什么意思?

【问题讨论】:

  • 非常感谢大家。你给了我参考和优点。我很久以前就开始使用 Javascript,在著名的框架让每个人都知道这种脚本语言的强大之前。现在我对 ECMA-262 的 oop 功能着迷:旧的优秀 Javascript。

标签: javascript oop methods constructor


【解决方案1】:

toString 字面量是对象表示的一种默认名称吗?或者还有什么?

它是对象的toString 属性上的一个函数。

在 Javascript 中,当一个对象被转换为一个字符串时(EcmaScript §9.8: ToString,例如,当用于字符串连接时,或者在alert()document.write() 中)它的toString 方法被调用(通过ToPrimitiveDefaultValue - §8.12.8)。

通常,您会在自定义对象的原型上指定它,并且所有内置类型都有一个(例如Array.prototype.toString,它用逗号连接值)。您已在对象文字中明确设置它。

[object Object] 表示法是什么意思?

这是对象的默认toString 实现的结果,即。对于Object 的所有实例。 EcmaScript §15.2.4.2指定Object.prototype.toString返回[object+class+],普通对象的内部[[class]]为“Object”。

【讨论】:

    【解决方案2】:
    1. 当一个对象被发送到 write 时,write 在内部调用对象的 toString 方法,该方法可能(如在 o 中)或可能不会(如在 p 中)被覆盖。

    2. 在 toString 的默认实现中,第一个 object 定义它是一个对象(与数组或原语相反),第二个 Object 定义它是一个 Object 类型的对象。一些没有有意义的字符串表示的内置对象类型(例如 DOM 节点)返回它们的类型名称而不是 Object。当您希望自己的对象在传递给 write 时输出其类型名称,您必须重写 toString。

    【讨论】:

      【解决方案3】:

      JavaScript 中的每个对象都有一个 toString() 方法,当对象用于字符串上下文时会隐式调用该方法,例如使用 document.write(o) 以及编写 o + ' another string' 时。

      该方法默认返回'[object Object]',这不是很有用,但是可以覆盖它以返回任何你喜欢的;例如,NumericStringDate 之类的对象就是这样做的。

      【讨论】:

        【解决方案4】:

        '[object Object]' 由默认的toString 方法返回,该方法被从Object 继承的每个对象继承。

        【讨论】:

          【解决方案5】:

          toString 不是文字,它是一个函数并且为所有对象定义。记住函数是 javascript 中的“头等舱”。

          [object Object] 是浏览器默认 toString() 对象的返回值。

          这是 Mozilla 的优秀文档:

          https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/toString

          【讨论】:

          • 不,看起来没什么不同
          • +1 供参考和关于“头等舱”的备注!
          猜你喜欢
          • 1970-01-01
          • 2018-10-20
          • 2016-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-18
          • 2020-05-18
          • 1970-01-01
          相关资源
          最近更新 更多