- JScript code
function Odemo(name) { this.name=name; if(typeof sayName!='function') { Odemo.prototype.sayName=function() { return this.name; } } } var a=new Odemo('小王',25); //这里没有作用 Odemo.prototype={ name:'包包', sayName:function() { return this.name; } } alert(a.sayName()); //显示小王
- JScript code
function Odemo(name) { this.name=name; if(typeof sayName!='function') { Odemo.prototype.sayName=function() { return this.name; } } } var a=new Odemo('小王',25); //这里有作用 Odemo.prototype.sayName=function(name){ return this.name=name; } alert(a.sayName()); //显示undefined
如题,
求指点。。。。。。。
我的理解是:
第一段代码是重写了原型
也就变成了一个新的对象,
和原来的原型毫无关系,所以a.sayName还是可以读取原来的值
第二段代码是重写了原型方法
也就是把原来的原型方法给覆盖了
而我又没有传递参数,
所以是undefined
不知道这样理解正确否?
------解决方案--------------------
第一段不是重写原型,而是把原型地址指向改了
------解决方案--------------------
//这里没有作用
Odemo.prototype={
name:'包包',
sayName:function()
{
return this.name;
}
}
alert(a.sayName()); //显示小王
这一段是用点字面量的形式来创建原型对象,创建完成后构造函数的指针不指向新创建的原型对象,所以不会起作用,
//这里有作用
Odemo.prototype.sayName=function(name){
return this.name=name;
}
alert(a.sayName()); //显示undefined
这一段是重写了原型对象中的sayName方法,所以会立即生效。