javascript的类中没有私有成员呀,对象的封装性如何保证呀?
看来,观念的转变是不容易的。
按面向对象的观点,对象的特点是继承,封装,多态,
javascript中,首先不江满足封装,因为通过prototype属性,可以对对象的原型进行修改,就比如对类的内部进行修改一样。
实际我理解,对象的prototype属性,就是“类”,因为对它一修改,所有类的实际全会发生变化。
所以封装性基本上没有了。    <script type="text/javascript"> function myfun(name,age) {
this.name=name;
this.age=age
this.showme=function(){
alert(this.name.toString()+"-"+this.age.toString())
}
} var a=new myfun("小王",50)
a.showme(); //以下代码,相当于对类进行修改
myfun.prototype.showtmp=function(){
alert("定义prototype后的显示");
} //对修改前就实例化的对象,竟然产生作用了
a.showtmp();
  </script>
再说继承。好象javascript中,直能是变通实现,也要借助于 prototype 属性。再说多态。好象javascript中没有虚函数,所以也无法实现真正的多态。如果这样的话,javascript中的面向对象特性,体现在何处呢?
js简直是太灵活了。

解决方案 »

  1.   

        function myfun(name,age) {
            var sex = true;  //私有滴
            this.name=name;
            this.age=age
            this.getSex = function() { return sex;};
            this.showme=function(){
                alert(this.name.toString()+"-"+this.age.toString())
            }
        }
      

  2.   

    var sex = true; //私有滴
    --------------------------
    但是这个 sex 成员可以随便改呀,
    a.sex="adf"
    b.sex="dd"封装性如何体现呢?
      

  3.   

    私有成员是肯定有的,块外肯定不能修改块内的参数和变量;
    prototype属性,我的理解就是“属性”,最多是“属性”+“方法”;
    继承有,多态无,至于封装性的问题,我不知道你说的是不是闭包问题,我正在琢磨这个,有点深奥,摸索中...
      

  4.   

    以下,这不就是随便改吗?    <script type="text/javascript"> function myfun(name,age) {
      var sex = true; //私有滴
      this.name=name;
      this.age=age
      this.getSex = function() { return sex;};
      this.showme=function(){
      alert(this.name.toString()+"-"+this.age.toString())
      }
      }
      a=new myfun("zzzz",66)
      a.sex="男"
      alert(a.sex)  </script>
      

  5.   

    sex是私有的,按封装的道理说,不能由对象来访问的。即a.sex是不能访问的。
    但是这里 a.sex是可以访问,并且可以修改呀。
      

  6.   

    错了。
    你直接alert(a.sex)是undefined;
    因为私有属性不可访问。
    但是你又 a.sex = '男' 相当于创建了一个新的public属性sex,仅此而已,但是内部的sex并没有改变。
      

  7.   

    按照9楼写法,你可以再
    alert(a.getSex());
    这个才是弹出的私有sex的值。
      

  8.   

    a.sex="男"
    此处是给对象a动态添加了一个属性sex,此处的sex和var sex=true处的sex不是同一个东西。看下面的代码
    <script type="text/javascript">    function myfun(name,age) {
       //   var sex = true; //私有滴
          this.name=name;
          this.age=age
          this.getSex = function() { return sex;};
          this.showme=function(){
          alert(this.name.toString()+"-"+this.age.toString());
          }
          }
          a=new myfun("zzzz",66);
      b = new myfun("abc",30);
          a.sex="男";
          alert(a.sex);
      alert(b.sex);</script>
      

  9.   

    var(var a = 1) 私有的
    this(this.a = 1) 对象的
    什么都不加(a = 1) 全局的(window的)
      

  10.   

    用代码说话吧,是我的代码有问题吗?
    谁能用代码证实,私有成员不会被修改呢? function myfun(name,age,s) {
      var sex; //这个是私有的吗
      this.name=name;
      this.age=age
      this.sex=s;
          this.GetSex=function(){return (this.sex)}
      }
      a=new myfun("zzzz",66,"女")
      a.sex="男"
      alert(a.sex)
      alert(a.GetSex())
      

  11.   

    好 你的代码问题严重的很
    var sex
    this.sex
    你传参进来赋值的参数又是什么?
    你在GetSex的时候调用的是什么?
    始终没有用到sex 你没发现吗    function myfun(name,age) {
          var sex = true; //私有滴
          this.name=name;
          this.age=age
          this.getSex = function() { return sex;};
          this.showme=function(){
          alert(this.name.toString()+"-"+this.age.toString())
          }
          }
          a=new myfun("zzzz",66)
          a.sex="男"
          alert(a.sex)
          alert(a.getSex());
    TRY
      

  12.   

    a=new myfun("zzzz",66,"女")
          a.sex="男"
          alert(a.sex)
          alert(a.GetSex())
    ------------------------
    初始化时为女,按理私有sex为女,
    a.sex="男",并不会改变私有的。
    但是代码中可见,确实变成男的了。
      

  13.   

    用 obj.xxx引用的都是public的属性。
    楼主一定要钻牛角尖没人管你。
    9楼里面有个返回私有sex属性的getSex方法你不用,偏要改成返回公共sex属性的getSex方法。
    你这就是抬杠。
      

  14.   


    <script>
    function obj(){
    var p = '我就是私有的,你不通过set方法根本没法改变我!也必须通过内部get方法获取我!'; //私有p
    this.setP = function(v){
    p = v;
    return this;
    }
    this.getP = function(){
    return p;
    }
    this.p = '我就是公有的!'
    }
    var o = new obj;
    alert('公有p----' + o.p);
    alert('私有p-----' + o.getP());
    alert('我改变后的私有p-------' + o.setP('我是私有p,被改变了!').getP());
    </script>
      

  15.   

    谢谢两位老师:
    原来 sex前加上 this,就变成公有的了。
    我不知道呀,不是抬扛。