js 继承

javascript有很多种继承方法,今天我简单的总结一下:

一、原型继承方式:
1    function parent(){};
2            parent.prototype.Pname=‘Parent‘;
3    function child(){}
4           child.prototype=new parent();                 //将子类的原型指向父类
5           child.prototype.Cname=‘child‘;

这样就实现了原型继承。将父类的对象作为子类的原型;

打开调试器:粘贴上面的代码。然后var c = new child(); console.log(c);我们可以看到输出: child {Cname: "child", Pname: "Parent"}

二、 组合继承:
 1   function parent2(sparam){
 2             this.param=sparam;
 3             this.getParam=function(){
 4                return this.param;
 5            }
 6    };
 7 
 8   function child2(cparam,cname){
 9                  parent2.call(this,cparam);                   //调用父类构造函数
10                  this.name=cname;
11    }
12   child2.prototype=new parent2(‘param‘);                //继承父类
13  child2.prototype.getName=function(){
14         return this.name;
15     }

用call和apply的方式将this指针传给父方法。

三、类继承不是很常见,一般都是组合着用。看下例:

1 function Super(){
2     this.colors=["red","blue"];
3 }
4  
5 function Sub(){
6     Super.call(this);
7 }

 

这就是类式继承,这个有一个缺点就是   方法在构造函数内创建,函数的复用就无从谈起了,而且还有一个问题,就是在超类原型中定义的方法对子类是不可见的。

 

还有就是子类会复制父类的属性,如下:

1 var a=new Sub();
2 a.colors.push("black");
3 console.log(a.colors);//----->   "red,blue,black"
4  
5 var b=new Sub();
6 console.log(b.colors);//----->   "red,blue"

 


三、属性复制:

遍历父类的属性,复制给子类。



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。