两个初级问题请教:
问题1:以下两种输出为何不同呢?加不加括号,区别何在呢?
//问题2:如果为yy赋初值,则下面两个alter显示相同,但是如果不赋值,则this.yy显示undefined,可是yy却报错
  <script type="text/javascript">
var a={x:1,y:2}; //问题1:以下两种输出为何不同呢?加不加括号,区别何在呢?
alert(a.toString());
alert(a.toString); //问题2:如果为yy赋初值,则下面两个alter显示相同,但是如果不赋值,则this.yy显示undefined,可是yy却报错
//var yy=99;
alert(this.yy);
alert(yy);
  </script>

解决方案 »

  1.   

    问题1.toString()是方法,有(),toString用法不正确吧。一般没有()的,多为属性。
    如.var x = "xxxxxxx" , x.length ,length就是属性,没有()问题2.不给yy赋初值,谁又知道yy是个什么东西啊。所以this.yy=undefind了。alert(yy)成为没有定义yy了.this表示是这个对象。对象找不到undefind。
      

  2.   

    一般来说,引用一个属性:object.property
    这个时候不用加括号;
    若是激活一个方法:object.method()
    这个时候就需要加括号了.
      

  3.   

    你们说 toString要加括号,即 toString(),但是好象这是两种不同的意思吧。
    因为如果使用错误的话,应该报错,但是实际没有报错,只是显示不同。所以我问问,二者有何区别?
      

  4.   

      
    <script type="text/javascript">
        var a={x:1,y:2};    //问题1:以下两种输出为何不同呢?加不加括号,区别何在呢?
        alert(a.toString());//这里输出的是执行结果
        alert(a.toString);  //这里输出的是这个方法。以为没执行,所以出来的就是其本身咯    //问题2:如果为yy赋初值,则下面两个alter显示相同,但是如果不赋值,则this.yy显示undefined,可是yy却报错
        //var yy=99;
        alert(this.yy); //this.yy是this的一个属性,那么他就是一个为初始化的属性呗
        alert(yy);      //yy是一个变量,但是这个变量却没有声明(定义)
      </script>如果说var yy=99;了
    那么yy自动成为了全局变量window的一个属性
    而this => window
    所以结果一样~
      

  5.   

    1.关于toString
     你定义的a是一个JSON形式的object 它里面有一个key为toString其value是定义的toString方法,所以你用a.toString显示的是这个方法的定义,而a.toString()是调用的toString()方法
      

  6.   


    alert(typeof(a.toString()));//string
    alert(typeof(a.toString));//function你可以这样试试 第一个typeof是toString()方法的返回值类型
    第二个typeof是a.toString的类型,这里a.toString 相当于a["toString"]