Javascript对象编程和对象表示

时间:2012-09-27 14:27:14

标签: javascript oop methods constructor

方案

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

    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()方法可以显示o object而不调用toString()方法,而p object显示为......是什么?

问题

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

  2. [object Object]符号的含义是什么?

5 个答案:

答案 0 :(得分:2)

  

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]]为“Object”。

答案 1 :(得分:1)

toString不是文字,它是一个函数,是为所有对象定义的。记住函数在javascript中是“第一类”。

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

这是Mozilla的优秀文档:

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:-1)

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