读书人

这段代码为什么没有作用?该怎么解决

发布时间: 2012-03-24 14:00:47 作者: rapoo

这段代码为什么没有作用?

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方法,所以会立即生效。

读书人网 >JavaScript

热点推荐