2012-09-27 41 views
0

方案Javascript对象编程和对象表示

我与一些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()方法让o object在不调用toString()方法的情况下被显示,而p object被显示为...那么?

质询

  1. 是对对象的代表性toString字面一种默认的名字?还有什么?

  2. [object Object]表示法的含义是什么?

+0

非常感谢大家。你给了我参考和好点。我很早以前就开始使用Javascript,在着名的框架让大家知道这种脚本语言的力量之前。现在我对ECMA-262的oop功能着迷:旧的好Javascript。 –

回答

2

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

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

在Javascript中,当(在一个字符串串联使用时,或者在alert()document.write()EcmaScript §9.8: ToString,例如)它的toString方法被调用(经由ToPrimitiveDefaultValue - §8.12.8)的对象被浇铸为字符串。

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

[object Object]符号是什么意思?

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

+0

+1为参考。 –

0
  1. 当对象被发送到写,内部写调用对象的toString方法可能(如在O)或可能不(像p)被覆盖。

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

-1

“[对象的对象]”是通过每一个对象从Object下降,其继承的默认toString方法返回。

0

在JavaScript中的每个对象都有一个toString()方法,当物体在字符串上下文中使用,如用document.write(o)而且当你写o + ' another string'它被隐式调用。

该方法默认返回'[object Object]',这不是很有用,但可以覆盖返回任何你喜欢的东西;像NumericStringDate这样的对象可以做到这一点。