toString()方法,这个方法的作用是返回一个可以表示一个可以表示这个对象的字符串。在希望使用字符串的地方用到对象的话如:将对象用做属性名或使用“+”运算符来连接两字符串运算。 js会自动调用这个方法。如果没有实现这个方法,类会默认从Object.prototype中继承toString()方法。这个方法的运算结果是"[object Object]"。这样的返回没有什么意义,toString()方法返回一个可读字符串的toString()方法也会让程序调试变得更加轻松。
toLocaleString()方法 与toString()极为类似:前者是以本地敏感性的方式将对象转换为字符串。在默认情况下,它只是简单的调用了toString()方法
valueOf()方法 它用来将对象转换为原始值。比如算数运算(除“+”外)以及关系运算符作用于数字表示的对象时,会自动调用valueOf方法。如枚举类中的valueOf() 方法就显得很重要。
toJSON()方法,这个方法是由JSON.stringify()自动调用的。当对象执行序列化操作时,它会忽略对象的原型和构造函数。如果将字符串传入JSON.parse()则会得到一个具有相同属性的纯对象。如果一个对象有自己的toJSON () 方法,JSON.stringify()将不会对传入的对象做序列操作。
对于之前提过的Set类,没有实现上述的四个方法。对于Set类,javascript中没有哪个原始值可以表示集合,因此没有必要定义valueOf()方法,但该类应当包含toString()/toLocaleString()/toJSON()三个方法。这里可以使用extend()来向Set.prototype添加这三个方法:
//将方法添加到原型对象中
extend(Set.prototype,{
toString:function(){
var s = "{",
i=0;
this.foreach(function(v){s+=(i++>0)?",":""+v;});
returns+"}";
},
toLocaleString:function(){
var s ="{",
i=0;
this.foreach(function(v){
if(i++>0)s+=",";
if(v==null)s+=v;
elses+=v.toLocaleString();
});
returns+"}";
},
toArray:function(){
var a=[];
this.foreach(function(v){a.push(v);});
return a;
}
});
//set 的toJSON可以看作同数组一样的处理
Set.prototype.toJSON = Set.prototype.toArray;