<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'
求大神解释
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'
求大神解释
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());b2,b3实例你没调用setuser方法,实例中默认的user的值就是undefined
你的prototype放在函数体内,导致每次实力化一个对象的时候,都重新定义了prototype,导致以前已经实例化的对象的prototype定义的方法作用域都被更改为最后一次实例化的对象的,所以很好解释了为什么b3.getuser为b1.setuser设置的值,b1.setuser被修改为b3的了,导致b1.setuser设置的位b3的私有变量user。你更改下b1,b2,b3的实例化循序,如下,这样b2.getuser就会输出www了
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());
哥们 我是否能这样理解:这个原型是每个对象都可以用的,然而这个setuser相当于每个对象都有这个方法所以后面的对象把前面的方法给覆盖了,然后在b1上面设置 实际是给b3上设置的????