看见一些代码,如这样定义
ns.myclass = function(theValue) {
var counter = 0;
var value = theValue;
this.value = value;
this.counter = counter;
}为什么要定义var ,再将var赋给this.var呢? 这样有什么好处?1,4; 2,3这两组,指代的莫非是不同的变量?和如下定义有什么区别?
ns.myclass = function(theValue) {
var counter = 0;
var value = theValue;
}

解决方案 »

  1.   

    在函数中使用this,则该函数被new实例化后,带this.前缀的变量则可称为是该实例的属性,带this.前缀的函数可看做是该实例的方法,var申明的变量则不能被该实例访问到,但可通过带this前缀的属性或方法访问,请查阅JavaScript变量作用域及面向对象相关资料。
      

  2.   

    那么如果把var定义的看成private的东西,this.XXX定义的看成public的东西,这样想也似乎讲的通,对吧?
      

  3.   

    恩,有时候可以这样去考虑,比如,我们可以这样处理private(当然如果真正要用私有,我们可能会在返回prototype的时候进行构造,本例只做示范):
    <script type="text/javascript">
    var a = function(){
        var privateTxt = 'private';
        this.publicTxt = 'public';
        this.getPrivate = function(){alert('通过方法访问到私有成员:'+privateTxt);};
        this.setPrivate = function(str){privateTxt = str;};
    }var A = new a();
    alert('访问属性成员:'+A.publicTxt);//访问属性成员A.publicTxt = 'public A';//直接设置属性成员值
    alert('设置后的属性成员值:'+A.publicTxt)alert('访问私有成员:'+A.privateTxt);//试图访问私有成员A.getPrivate();//只能通过方法进行访问私有成员A.setPrivate('private A');//只能通过方法进行设置私有成员
    A.getPrivate();
    </script>