`
xjtusaber
  • 浏览: 54036 次
  • 性别: Icon_minigender_1
  • 来自: 龙黄
社区版块
存档分类
最新评论

阅读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();之后。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics