一、JavaScript中要实现继承,需要实现三层含义
1、子类的实例可以共享父类的方法;
2、子类可以覆盖父类的方法或者扩展新的方法;
3、子类和父类都是子类实例的“类型”。
二、JavaScript中实现继承的方式
JavaScript中并不直接从语法上支持继承,但是可以通过模拟的方法来实现继承,常见的实现继承的几种方法
1、构造继承法:
在子类中执行父类的构造函数,该继承法能实现多重继承,但只能继承父类的共有方法,无法继承静态方法,而且不能用instanceof来验证实例。
2、原型继承法
该继承法是通过复制已经存在的原型对象来实现行为重用,让对象实例共享原型对象的属性。支持多重继承,继承原型静态方法,能用instanceof来验证实例。
要了解什么是“原型继承法”,先了解一下prototype的特性:prototype的最大特性是能够让对象实例共享原型对象的属性,因此如果把某个对象作为一个类型的原型,那么我们说这个类型的所有实例都一这个对象为原型。这个时候,实际上这个对象的类型也可以作为那些以这个对象为原型的实例的类型。
3、实例继承法
(1)构造继承法的局限性:
构造继承法没有办法继承类型的静态方法,因此它无法很好的继承JavaScript的核心对象
(2)原型继承的局限性
原型继承法虽然可以继承静态方法,但是依然无法很好地继承核心对象中的不可枚举方法
(3)、实例继承法的特性
能对原生核心对象或者DOM对象进行继承,它通过在类型中构造对象并返回的办法来实现继承,因此instanceof验证会是false,不支持多重继承。
4、拷贝继承法
该方法通过拷贝基类对象的所有可枚举属性和方法来模拟继承,因此它可以模拟多继承,但不能枚举的就无法继承;它可以继承父类的静态方法;
5、混合继承法
把上面几种继承法综合起来,取长补短,让继承更完善。常见的有 构造+原型继承
例如
function a(){
this.num=123;
this.say=function(){
alert("happy new year!");
}
}
function b(){
a.apply(this);
}
b.prototype=new a();
b.prototype.z=123;
var oB=new b();
alert(oB instanceof a); // true
alert(oB.num); // 123
oB.say(); // happy new year
文章转载自: JavaScript中的继承 http://www.studyofnet.com/news/1017.html