function Foo(a, b)       {              this.a = a;              this.b = b;              this.sum = {                     valueOf:function(){       return a+b},//只写这一行,弹出:[Object Object]                     toString:function(){return a+b}//只写这一行,也会弹出:3,为会么要同时写这两行呢?}       }       alert((new Foo(1,2)).sum); //同样得到3

解决方案 »

  1.   

    当你调用sum对象的时候,他会自动调用toString()方法,把对象转化成字符串类型再显示,你这只是重写了sum对象的toString()。
      

  2.   


    // valueOf 方法 很少显式使用,一般都是被自动调用var obj = {};
    alert(obj == 3);  // 当然不是 true;
    obj.valueOf = function() { return 3; };  // 改了 valueOf 方法,就不一样了
    alert(obj == 3);