首页 > 代码库 > js对象之间的继承
js对象之间的继承
js的对象之间的继承抛弃了原型与构造器的概念,而转为字面量对象之间进行属性拷贝的方式进行继承。
首先我们来写一个封装好的继承函数:
function extend(parent){ var child={}; for(var i in parent){ child[i]=parent[i]; } child.uber=parent; return child;}
函数有一个实参parent,函数内部新建一个空的子对象,这个子对象就像一个白的画板,逐渐的将父对象上的内容临摹上去。for循环当中是将父对象中的属性和方法逐个复制给子对象。再将子对象的uber指向父对象,这样调用子对象的uber属性就可以调用父对象的属性和方法了,这相当与java中的super,为什么js当中不用super呢,因为super在js中是保留字,所以采用德语与“super”同义的“uber”来替代。
下面来看看这个函数的实际应用,首先创建一个父对象:
var Shape={ color:"blue", name:"shape", getName:function(){ return this.name; }}
接着我们来实现继承,并扩展和重写子对象的一些方法:
var circle=extend(Shape);circle.name="circle";circle.getName=function(){ return "parentName:"+this.uber.getName()+" childName:"+this.name;}circle.getS=function(){ return this.radius*this.radius*3.14;}circle.init=function(radius){ this.radius=radius;}
首先使用extend函数实现继承
子对象添加了新的name属性和新的getName方法,还有扩展的getS方法和init初始化方法
getName中this.uber.getName()调用父对象的getName()方法,得到父对象的name属性,this.name得到自身的name属性。
接下来执行方法:
circle.init(5);console.log(circle.name+","+circle.uber.name);console.log(circle.getName()+","+circle.uber.getName());console.log(circle.getS());/*结果:circle,shapeparentName:shape childName:circle,shape78.5*/
js对象之间的继承
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。