function Foo(a, b)
{
this.a = a;
this.b = b;
this.sum = {
valueOf:function(){ return a+b},
toString:function(){return a+b}
}
}
alert((new Foo(1,2)).sum); //疑问一:按照常规应该写成alert((new Foo(1,2)).sum.valueOf());或者alert((new Foo(1,2)).sum.toString());
//另外有人说,他是默认执行toString,那么我又要问了,什么时候才能是默认执行valueOf函数  

解决方案 »

  1.   

    没有可能默认执行到valueOf的.toString属于js的默认方法.
      

  2.   

    默认执行toString  是说这些方法是 javascript 中的对象 已经实现的这个方法,我们直接可以用,不用去写啦.
    如果我们不去调用它是不会去执行的..
    感觉你进了误区.function Foo(a, b)   //定义了一个函数对象,并传入了两个参数

    this.a = a;          //给这个对象初始化属性
    this.b = b; 
    this.sum = {         //sum 是Foo 的属性,其实sum 指向的是一个对象 ,这个对象有两个方法 valueOf 和 toString
    valueOf:function(){ return a+b}, 
    toString:function(){return a+b} 

    } 当我们要调用 sum  中的toString 方法时要首先new 一个 Foo对象 如: newFoo ,让后调用属性中的方法
    newFoo.sum.toString();
    只有我们去调用它的时侯才会执行
      

  3.   


    <html>
      <head>
        <title>test</title>
      </head>
      <script type="text/javascript">
        function Foo(a, b) { 
          this.a = a; 
          this.b = b; 
          this.sum = { 
    valueOf:function(){alert("this is 1");return a+b} ,
            toaString:function(){alert("this is 2");return a+b} //注意是toaString,变了
          } 
        } 
        alert((new Foo(1,2)).sum); 
      </script>
      <body></body>
    </html>
    lz可以跑一下这个方法. 返回的是[object Object]而你把alert中改成new Foo(1,2).sum.valueOf() 或者.toaString()就可以成功调出来了.toString()是对象调用的方法.