<script language="javascript" >
// 疑问一:
 function test()
 {
 var mytest = "!!!!!!!!!!";
 //正确的声明: 
 //
 this.mytest = "!!!!";//这里this是调用test方法的对象,没有对象调用的话就是默认window对象了
 alert(this.location);
 alert(this.mytest)
 alert(window.mytest)
//
 }
 test()
// 不解? 假设function是对象,为什么var mytest后,this.mytest未定义? 
</script>

解决方案 »

  1.   


     // this.myobj = new Object(); //定义一个新对象,并返回! 
    这里只是定义了一个属性是一个新的对象,而并不是重新的对象
    var myobj = new Object();//这样写就可以了
      

  2.   

    疑问三也是一样的
     // var testvar = "????";
    // alert(this.testvar); //这里的结果是 ????
    这里定义的是一个变量,而并不是一个属性//其实都差不多,你先把他想成一个树,window对象是根,其他定义的方法和变量都是他的叶子,方法内部定义的只是调用这个方法的对象的叶子。一起想确实很不容易理解的,慢慢来
     <script language="javascript" >
      var testvar1="????"
     function test()
     {
     var testvar2 = "????";
     alert(this.testvar1); //这里的结果是 ????
    alert(this.testvar2); //这里的结果是 undefined
     }
     test()</script>
      

  3.   

    // 疑问一: 
    // function test() 
    // { 
    // var mytest = "!!!!!!!!!!"; 
    // 正确的声明: this.mytest = "!!!!"; 
    // alert(this.mytest); 
    // } 
    // 不解? 假设function是对象,为什么var mytest后,this.mytest未定义? 
    解答:
      在函数里用 var 声明的当成 private成员,用this.XXX声明的是 public成员,就算变量名一样,但是这两个也是不同的变量
      运行一下下面的例子就知道了
      //----------------------------------------------------------
      function a() {
    var b = 'var b';
    this.b = 'this.b';
    this.show1 = function() {
    alert(b);
    };
    this.show2 = function() {
    alert(this.b);
    };
      }
      new a().show1();
      new a().show2();
       
      //----------------------------------------------------------  这个例子就类似这样
     类 a 有 两个成员变量和两个成员函数,其中的一个成员变量为私有,另外的一个成员变量和成员函数都是公有(在类的实例化对象中可用)  
    // 疑问二: 
    // function tone() 
    // { 
    // this.myobj = new Object(); //定义一个新对象,并返回! 
    // this.testvar = "!!!!!"; 
    // myobj.myfunction = function() 
    // { 
    // alert(this.testvar); 
    // } 
    // return myobj; 
    // } 
    // function test() 
    // { 
    // var tobj = new tone(); 
    // tobj.myfunction(); 
    // } 
    // 不解? IE提示,myobj未定义?为什么? 解答:
    同第一个疑问,用this声明的是公有变量,你下面的 myobj.myfunction 当然不对了,因为你没有声明这个myobj,必须 var myobj其实定义一个空对象不一定要用 new Object()可以用这个“{}”代替  即this.myobj ={};
    // 疑问三: 
    // function tone() 
    // { 
    // var myobj = new Object(); //定义一个新对象,并返回! 
    // var testvar = "!!!!!"; 
    // myobj.myfunction = function() 
    // { 
    // var testvar = "????"; 
    // alert(this.testvar); //这里的结果是 ???? 
    // } 
    // return myobj; 
    // } 
    // function test() 
    // { 
    // var tobj = new tone(); 
    // tobj.myfunction(); 
    // } 
    解答:
    这里你是不是看错了啊,明明alert出来的是“undefined”啊

    // 疑问四: 
    // function test() 
    // { 
    // var mytext = "!!!!"; 
    // alert(this.mytext); //未定义? WHY? 难道mytext不是对象级吗? 
    // } 
    // function test() 
    // { 
    // this.mytext = "!!!!"; 
    // alert(this.mytext); //正确,没问题! 
    // } 
    // function test() 
    // { 
    // mytext = "!!!!"; 
    // alert(this.mytext); //正确,为什么有var就不行了? 
    // } 
    // function test() 
    // { 
    // this.mytext = "!!!!"; 
    // alert(mytext); //正确! 但是和下面比较又有什么不同? 
    // } 
    // function test() 
    // { 
    // var mytext = "!!!!"; 
    // alert(mytext); //正确! 但是和上面比较又有什么不同? 
    // } 
    // 上面的例子其实表明了 
    /* 
    在function的对象级内, this.mytext == mytext 
    又 
    var mytext == mytext 
    但是 
    this.mytext != var text 
    这是为什么? 
    */ 
    // function test() 
    // { 
    // this.mytext = "???"; 
    // var mytext = "!!!"; 
    // alert(mytext); //打印 !!! 
    // alert(this.mytext); //打印 ??? 
    // // 这里其实否定了 
    // // function test() 
    // // { 
    // // this.mytext = "!!!!"; 
    // // alert(mytext); //正确! 但是和下面比较又有什么不同? 
    // // } 
    // //  这个方法,这个方法却是正确的??? 奇怪否? 
    // } 
    function test() 

    var mytext = "!!!!"; 
    this.mytext = "???"; 
    alert(mytext +  ', ' + this.mytext +  ', ' + window.mytext); 
    //window应该是test更外层的对象吧,那么为什么window.mytext居然和this.mytext相同? 
    //如果这样的话,那不是正好又混淆了,function(){function()}的this解释吗? 

    解答:
    这个搞不懂了,this是让继承或者实例化类用的,没有继承或者实例化的对象你用this干嘛
      

  4.   

    function test(){
      this.XXX.......
    }如果不实例化 test,直接运行 test的话,就相当于
    运行window.test();
    所以test里的 this,指的是 window