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函数
{
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函数
如果我们不去调用它是不会去执行的..
感觉你进了误区.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();
只有我们去调用它的时侯才会执行
<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()是对象调用的方法.