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());