阅读prototype 1.5.js之继承

首先贴出prototype.js实现继承的代码:
Object.extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
}

很明显,这里把source的所有属性copy到destination下,即destination继承source,由于只是简单的属性copy,所以写代码的时候要注意调用Object.extend的顺序,否则无法实现overriding。举个例子:
var  Animal={
step:function(){
alert('Animal stepping !')
}
}
var People=Class.create();
People.prototype={
initialize:function(name){
this.name=name;
},
step:function(){
alert(" People "+this.name+' stepping !')
},
work:function(){
alert('People '+this.name+' can work ')
}
}
Object.extend(People.prototype,Animal)//copy 事例变量

var p=new People('xqxq');
p.step();

输出结果为:Animal stepping !
而我本来是想在子类People覆盖掉父类Animal的step方法的,原因很简单:最后才声明People继承Animal,copy过程中父类把子类的方法覆盖了!!
正确的办法是先声明继承(把父类的属性先copy过来),然后再定义子类的方法、属性,比如这个例子,即把
Object.extend(People.prototype,Animal)//copy 事例变量
这句放到var People=Class.create();之后。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值