<script>
function a(a1){
this.a1=a1
this.onclick=aa
}
function aa(){
alert(this.a1)
}
a2=new a('fason')
a2.onclick()
</script>

解决方案 »

  1.   

    不可以 fason(【阿信】的不对
    alert(a2.a1); //a1在外部可以访问,所以不是私有变量
      

  2.   

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function myObj(){
    var emu="hello";
    this.setEmu = function (s){try{this.onEmuChange(emu,s)}catch(e){};emu=s;};
    this.getEmu = function (){return emu};
    this.onEmuChange = function (s1,s2){
    alert("Property emu was changed from \""+s1+"\" to \""+s2+"\" .")
    }
    }
    var o = new myObj();
    var p = new myObj();
    p.onEmuChange=function(){alert("*****")};
    o.setEmu("test");
    p.setEmu("world");
    alert(o.getEmu())
    alert(p.getEmu())
    //-->
    </SCRIPT>注意这个emu属性是private的,你不能通过p.emu来访问它。
      

  3.   

    改进了触发事件处理,允许在on...方法中 return false 来禁止改变。注意下面例子中o.setEmu("test");没有设置进去,因为 return false 了。
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function myObj(){
    var emu="hello";
    this.setEmu = function (s){
    var actionResult;
    try{actionResult = this.onEmuChange(emu,s)}catch(e){};
    if (actionResult != false){
    emu=s;
    try{this.afterEmuChange(emu,s)}catch(e){};
    }
    };
    this.getEmu = function (){return emu};
    }var o = new myObj();
    var p = new myObj();o.onEmuChange=function(){alert("before change o");return false};
    o.afterEmuChange=function(){alert("after change o")};p.onEmuChange=function(){alert("before change p")};
    p.afterEmuChange=function(){alert("after change p")};o.setEmu("test");
    p.setEmu("world");
    alert(o.getEmu())
    alert(p.getEmu())
    //-->
    </SCRIPT>
      

  4.   

    高人!更正我的说法。是可以的
    <script>
    function a(a1){
      var a=a1; // 关键在这里。声明为局部变量,不能使用this指针。
      this.get=function(){
        return a;
      }
    }
    a2=new a('fason');
    alert(a2.get()); //out fason
    alert(a2.a1); //out undefined
    </script>
      

  5.   

    更正
    alert(a2.a); //out undefined
      

  6.   

    this.onEmuChange = function (s1,s2){
    alert("Property emu was changed from \""+s1+"\" to \""+s2+"\" .")
    }我感觉和用prototype的区别就在于下面用的继承只有一个副本,而这个每一个对象都一个副本myObj.prototype.onEmuChange = function (s1,s2){
    alert("Property emu was changed from \""+s1+"\" to \""+s2+"\" .")
    }
    好像区别不大!
      

  7.   

    这么高手来光顾,感动ing
    感谢大家