美文网首页
5. oop继承

5. oop继承

作者: zdxhxh | 来源:发表于2019-11-28 17:14 被阅读0次

JavaScript 继承实现方式

A. 类式继承

所谓类式继承,就是将子类的原型指向父类的一个实例。这样优缺点就是

  • 调用了父类的构造函数,浪费时间和内存
  • 仅仅继承了父类的原型方法,但没有继承他的构造函数
// 父类
function Parent(name) {
  this.name = name;
}
Parent.prototype.sayYes = function () {
  console.log("say yes");
};
// 子类
function Child(name) {
  this.bName = name;
}
Child.prototype = new Parent();
let child = new Child("b");

B. 构造函数继承

为了继承父类的构造函数,我们决定在子类的constructor使用call方法调用父组件的构造函数

// 父类
function Parent(name) {
  this.name = name;
}
// 子类
function Child(aName, bName) {
  Parent.call(this, aName);
  this.bName = bName;
}

C. 组合继承

组合继承就是同时使用上面两种继承方法

// 父类
function Parent(name) {
  this.name = name;
}
Parent.prototype.sayYes = function () {
  console.log("say yes");
};
// 子类
function Child(name, bName) {
  Parent.call(this, name);
  this.bName = bName;
}
Child.prototype = new Parent();
let child = new Child("b", "a");

D. 寄生继承

为了解决继承原型方法而实例化父类作为子类Prototype而浪费内存的问题,06 年道格拉斯 \* 克罗斯创造了寄生继承,实现方式是我们自己创建一个构造函数,然后将它的原型对象指向要继承的对象

function inheritClass(childClass, parentClass) {
  function P() {}
  P.prototype = parentClass.prototype;
  let p = new P();
  p.constructor = childClass;
  childClass.prototype = p;
}

为什么不让 childClass.prototype = Parent.prototype,很多写继承的博客都没有写到这一点,很明显,这是因为这样做,当子类扩展原型方法时,就会污染父类的原型方法,所以必须子类原型必须是一个新的实例。

E. 寄生组合式继承

function A() {}
A.prototype.sayHello = function () {
  console.log("hello world");
};
function B() {
  A.call(this);
}
inheritClass(B, A);

相关文章

  • 5. oop继承

    JavaScript 继承实现方式 A. 类式继承 所谓类式继承,就是将子类的原型指向父类的一个实例。这样优缺点就...

  • OOP继承

  • OOP继承

  • 继承

    继承继承是 OOP 语言中的一个最为人津津乐道的概念。许多OOP 语言都支持两种继承方式:接口继承和实现继承。接口...

  • OOP继承(Js)

    ![7M1J1U}$$N{]$@K(ENJY`YN.png](http://upload-images.jians...

  • Java面试总结

    1.什么是OOP、AOP OOP即面向对象编程OOP三大特征:封装、继承、多态OOP五大原则:单一职责原则 (Si...

  • 继承

    继承 oop(面向对象的三大特性):继承、封装、多态 单继承 class p:... p = 2...cl...

  • 学习JS笔记(第八章-OOP上)

    OOP概念## OOP特点:抽象、封装、继承、多态 prototype属性与原型## 创建一个函数Foo时,Foo...

  • 内存。封装OOP与oop的继承

    这次的整理还是OOP(毕竟是个难点,重点) 讲到OOP肯定要提内存 虚拟内存总体划分为五大区域,栈区(堆栈),堆区...

  • Swift-OOP-继承

    简易代码 值类型(枚举、结构体)不支持继承,只有类支持继承 没有父类的类,称为:基类 Swift并没有像OC、Ja...

网友评论

      本文标题:5. oop继承

      本文链接:https://www.haomeiwen.com/subject/zqbbwctx.html