js面向对象设计中,在一个对象内部定义变量时,用 var a定义变量和this.a 定义变量有什么不同呢?他们的作用域有什么区别,以及对这些变量的操作有什么区别?
如:
var examp=function()
{
   var a;
   this.b="";
}
a和b一样吗?

解决方案 »

  1.   

    作用域应该一样.a与b一样吗?
    re:
    按照java的语法来说不一样.a==null,b=0长度的字符串
      

  2.   

    你这样就知道了:alert(typeof a);
    alert(typeof b);
      

  3.   

    恩,你说这个是有道理的。我主要的意思是想弄清楚this定义变量和var定义变量的区别,好像examp.a和examp.b是不同的。
    试下这段代码:
      var testCls=function(arg1){
            //对象内部公有变量,不允许外部访问
             var a=arg1;
            var b=10;
    this.c=11;
            var alertB=function(){
                     alert(b);
             }};
    var test=new testCls(4);
    alert("a="+test.a);
    alert("b="+test.b);
    alert("c="+test.c);
    </script>
    是有c可以访问到,a和b都访问不到
      

  4.   

    在方法内部定义变量的时候,如果在变量前添加var关键字那么这个变量属于方法的内部似有变量,在方法外部无法访问,如果没有用var定义变量则为全局变量。this.c想当与给方法的实例对象添加了一个属性,可以通过实例访问。
      

  5.   

    当this指针指向window的时候,你的变量就会变成全局变量。
    直接在全局定义的函数,闭包函数,其this指针指向的都是window。
    如果你用 new 使得函数变成一个对象的构造函数,则this指针指向生成的对象。function test(){
    this.a = 'a';
    var b = 'b';
    }test();
    alert(a); //a
    function test2(){
    this.a = 'b';
    }
    test2();
    var t = new test();
    alert(a); //b
    alert(t.a); //a
    alert(typeof b); //undefined
      

  6.   

    参见:http://www.jslab.org.cn/?tag=WhatIsThis