读书人

js原型方法有关问题

发布时间: 2012-08-31 12:55:03 作者: rapoo

js原型方法问题

JScript code
<script>    function box(){        var user;        this.getuser=function(){            return user;        };        box.prototype.setuser=function(value){            user=value;        };    }    var b1=new box();    var b2=new box();    var b3=new box();    b1.setuser('www');    alert(b1.getuser());    alert(b2.getuser());    alert(b3.getuser());</script>最近在学js面向对象与原型结果:undefined    undefined     'www'求大神解释


[解决办法]
看错循序。。

你的这种写法很少见。一般prototype定义放在函数体外或者使用this.setuser,放到函数体外时操作实例变量结合this对象,要不此时作用域就是window了,操作私有变量使用this.setuser定义方法


你的prototype放在函数体内,导致每次实力化一个对象的时候,都重新定义了prototype,导致以前已经实例化的对象的prototype定义的方法作用域都被更改为最后一次实例化的对象的,所以很好解释了为什么b3.getuser为b1.setuser设置的值,b1.setuser被修改为b3的了,导致b1.setuser设置的位b3的私有变量user。

你更改下b1,b2,b3的实例化循序,如下,这样b2.getuser就会输出www了
JScript code
 function box(){        var user;        this.getuser=function(){            return user;        };box.prototype.setuser=function(value){user=value;};    }    var b1=new box();    var b3=new box();//////    var b2=new box();//////    b2.setuser('www');    alert(b1.getuser());    alert(b2.getuser());    alert(b3.getuser()); 

读书人网 >JavaScript

热点推荐