js继承的方式

js的继承实现的方式具体可以分为6种
以下面的构造函数为例

function Person(name, age, sex) {
   this.name = name;
    this.age = age;
    this.sex = sex;
    this.sleep = function() {
        console.log(this.name + "每天都要睡觉");
    }
}

Person.prototype.run = function() {
    console.log("天天做运动");   
};

构造函数继承

  1. 实现方式:使用call等方法 是一个对象的this指向另一个对象 从而让其拥有这个对象属性和方法

  2. 缺点:无法继承父类原型上面的方法 对于子类不需要的方法 每次创建都会拥有 浪费内存

function Child(name) {
Person.call(this);
    this.name = name;
}
var p1 = new Child("丽丽", 18);
console.log(p1);
console.log(p1.run());//报错
console.log(p1.sleep());        

原型拷贝继承(混入式继承)

  1. 实现方式:使用for-in便利弗雷原型里面的所有属性,依次加入子类的原型中
  2. 缺点:原型中子类不需要的方法或者属性也继承过来了 占用空间
function Child(name) {
   this.name = name;
}
Child.prototype = new Person();
var c1 = new Child("杨洋");
console.log(c1.run());//天天做运动
console.log(c1.sleep());

原型链继承

  1. 实现方式:利用原型链来实现继承 父类的一个实例化对象作为子类的原型
  2. 缺点:子类实例和父类实例的原型对象上有成员共享的问题

组合继承(原型链和call继承组合)

寄生式继承

寄生组合式继承(常用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值