javascript继承
我理解的javascript的继承关键点是从其他对象上获取方法和属性到本对象上。所以基于本思想结合日常项目经验总结一下四种常用的继承方式:
1:构造继承
构造继承类似于Java中的继承思想,关键是在子对象的构造函数中,通过this和call方法,继承父对象的方法和属性,则在实例化子对象时,子对象同样具有父对象的属性和方法。
function A(){
this.show1=function(){
console.log("我是父类");
};
};
function B(){
A.call(this);
this.show2=function(){
console.log("我是子类");
};
};
//这样new出的B类对象,既具有A的方法,也具有B的方法。
2:原型链继承
我们都知道,对应面向对象语言,存在接口继承和实现继承,但ECMAScript无法实现接口继承,只支持实现继承(原型链)。
所以利用原型让一个引用类型继承另一对象的属性和方法,即为原型链继承。
function B(){
this.show2=function(){
console.log("我是子类");
};
};
function A(){
this.show1=function(){
console.log("我是父类");
};
};
B.prototype=new A();//即为实现原型链继承
3:组合式继承
组合式继承可以综合构造函数继承和原型链继承的优势。关键是利用构造函数继承实现属性继承,利用原型链实现方法的继承。这里不具体举例。
4:寄生式继承
关键:在拷贝原有对象原型基础上扩展新的属性和方法,构造新原型。
function Object(obj1){
functon ObjectChild(){};
ObjectChild.prototype=obj1;
return new ObjectChild();
};
//以上函数,传入一个对象可以拷贝出子对象返回。在此基础上实现寄生继承。
function createObject(obj1){
var clone=object(obj1);
//以下可以在克隆对象继承上添加新属性和方法
clone.say=function(){};
//返回扩展后的子对象
return clone;
return new ObjectChild();
};
//这样闯入一个父对象就可以得到继承并扩展后的子对象。