js 继承问题总结

这篇博客总结了JavaScript中的五种继承方式:1) 原型链继承,2) 借用构造函数,3) 组合继承,4) 寄生组合式继承,以及5) ES6的`extends`继承。每种方式都有其特点和应用场景,例如原型链继承存在引用类型值的问题,借用构造函数可以传递参数但无法复用方法,组合继承会调用两次父类构造函数,而寄生组合式继承通过浅拷贝解决了这一问题。最后,`extends`继承要求子类在`constructor`中调用`super`以获取`this`对象。
摘要由CSDN通过智能技术生成


JS继承是一个重点,在之前的面试中好几次面试官都提到这个问题。所以这次整理一下。
参考:
https://juejin.im/entry/58dfbe0361ff4b006b166388
http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html

1、类式继承【原型链继承】

类式继承就是将子代的原型 等于 父代的构造函数。如代码所示。

// 声明父类

function Animal() {

  this.name = 'animal';

  this.type = ['pig', 'cat'];

}
// 为父类添加共有方法

Animal.prototype.greet = function(sound) {

  console.log(sound);

}

// 声明子类

function Dog() {

  this.name = 'dog';

}

// 继承父类

Dog.prototype = new Animal();

var dog = new Dog();

dog.greet('汪汪');  //  "汪汪"

console.log(dog.type); // ["pig", "cat"]

问题:(1)包含引用类型值的原型
(2)在创建子类型的实例时,不能像超类型的构造函数中传递参数【没有办法在不影响所有对象实例的情况下,给超类型的构造函数传递参数】

2、借用构造函数
/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值