日期:2014-05-16  浏览次数:20382 次

这段代码为什么没有作用?
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方法,所以会立即生效。