实现构造函数的继承有五种方法:
现在有“动物”对象的构造函数
function Animal(){
this.special='动物';
}
“狗”的构造函数
function Dog(name,color){
this.name=name;
this.color=color;
}
使“猫”继承“动物”
1. 构造函数绑定
第一种为最简单的方法,使用call或apply,将父对象的构造函数绑定在子对象上
function Dog(name,color)
{
Animal.apply(this,arguments);
this.name=name;
this.color=color;
}
2. prototype模式
第二种方法更常见 使用prototype属性
如果“狗”的prototype对象,指向一个Animal的实例,那么所有“狗”的实例,就能继承Animal了
Dog.prototype=new Animal();
Dog.prototype.constructor=Dog;
3.直接继承prototype
Dog.prototype=Animal.prototype;
Dog.prototype.constructor=Dog;
这种方法就是不用建立Animal实例,比较节省内存缺点就是Dog.prototype和Animal.prototype指向同一个对象,对Dog的任何修改都会反映到Animal里
4. 利用空对象作为中介
为了弥补上一个方法的缺陷,我们采用一个空对象作为中介
function extend(Child,Parent)
{
var F=function (){};
F.prototype=Parent.prototype;
Child.prototype=new F();
Child.prototype.constructor=Child;
Child.uber=Parent.prototype;
}
5. 拷贝继承
function extend(Child,Parent)
{
var p=Parent.prototype;
var c=Child.prototype;
for(var i in p)
{
c[i]=p[i];
}
c.uber=p;
}