js继承方式

一. 原型链继承

function parent(){};
function son(){};
son.prototype = new parent();

原理: 子类的原型对象指向父类的实例。
缺点: 1. 子类实例共享子类原型对象的引用属性。
       2.创建子类的时候不能向父类构造函数传参。

二. 构造函数继承
function parent(){}
function son(name) {
    parent.call(this, name);
}
原理: 单纯的使用call将父类的this指向子类,执行父类构造函数。
缺点: 1. 子类的实例无法实现公共属性(功能函数)的复用,造成内存浪费。

三. 组合继承(原型链继承+构造函数继承)
function parent(){}
function son(name){
    parent.call(this, name); // 构造继承
}
son.prototype = new parent(); // 原型链继承
son.prototype.constructor = son;
原理: 通过call调用父类构造函数,实现构造函数的继承;通过将子类的原型对象指向父类的实例,实现原型链继承。
缺点: 1. 父类被调用了两次,导致子类实例上有一层属性,而原型对象上也有一层属性,子类实例上的属性屏蔽了其
原型上的属性。    复制代码

四. 寄生组合继承(解决了组合继承中原型中多一份属性的缺点)

function getPrototype(obj) {
    var F = function(){};
    F.prototype = obj;
    return new F();
}
function parent(){}
function son(name) {
    parent.call(this, name); // 构造函数继承
}
var prototypeObj = getPrototype(parent.prototype); // 生成一个obj;
son.prototype = prototypeObj; // 将son的原型对象指向上述的obj对象。
son.prototype.constructor = son;


或者
function parent(){}
function son(name) {
  parent.call(this, name); // 构造函数继承
}
son.prototype = Object.create(parent.prototype);
son.prototype.constructor = son;

复制代码



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值