继承

作者: 三省吾身_9862 | 来源:发表于2021-12-06 11:21 被阅读0次
  1. 原型链继承,缺点:引用类型属性list改了,会影响其他实例
function Super() {
  this.list = [1,2]
}

Super.prototype.sayAge = function () {
  console.log(this.age)
}

function Sub(age) {
  this.age = age;
}

Sub.prototype = new Super()

var s1 = new Sub(30) 
s1.list.push(3)
var s2 = new Sub(30) 
s2.list // [1,2,3]
  1. 借用构造函数,函数被call来使用,无法继承函数的原型
function Super() {
  this.list = [1,2]
}

Super.prototype.sayAge = function () {
  console.log(this.age)
}

function Sub(age) {
  this.age = age;
  Super.call(this)
} 

var s1 = new Sub(30)
s1.sayAge // undefined
  1. 组合继承;结合上面的两个继承,互补利弊;唯一不足,实例通过Super.call有的属性,原型上 new Super()也有,重复了
function Super(name) {
  this.name = name
  this.list = [1,2]
}

Super.prototype.sayAge = function () {
  console.log(this.age)
}

function Sub(name, age) {
  Super.call(this, name)
  this.age = age;
} 

Sub.prototype = new Super()

var s1 = new Sub('kp', 30)
s1原型上,属性重复
  1. 寄生组合式继承,Sub.prototype是一个空对象new F()【代替new Super()】这个空对象的构造函数原型是Super.prototype;解决上面问题: 原型上 new Super()也有,重复了 的问题
function object(o){ 
  function F(){} 
  F.prototype = o; 
  return new F(); 
} 

function Super(name) {
  this.name = name
  this.list = [1,2]
}

Super.prototype.sayAge = function () {
  console.log(this.age)
}

function Sub(name, age) {
  Super.call(this, name)
  this.age = age;
} 

Sub.prototype = object(Super.prototype)
// Sub.prototype = Object.create(Super.prototype) // 上一行代码,可以用Object.create,代替object这个自定义方法
Sub.prototype.constructor = Sub
var s1 = new Sub('kp', 30)
s1
s1原型上,没有重复属性
  1. class 继承,采用的就是 【4. 寄生组合式继承】
class Super{
  constructor(name) {
    this.name = name
  }

  sayAge() {
    console.log(this.age)
  }
}

class Sub extends Super{
  constructor(name, age) {
    super(name)
    this.age = age
  }
}

var s1 = new Sub('kp', 30)
s1 - class继承

相关文章

  • 继承 继承

    属性拷贝 继承不单单能通过原型链实现,也能通过其他方式实现,属性拷贝就是其中一种方法。 通过属性拷贝也能实现继承子...

  • 继承(单继承,多继承)

    将共性的内容放在父类中,子类只需要关注自己特有的内容 python中所有的内容都是对象,所有的对象都直接或间接继承...

  • js继承方式

    类式继承 构造函数继承 组合继承 类式继承 + 构造函数继承 原型式继承 寄生式继承 寄生组合式继承 寄生式继承 ...

  • Python-学习之路-08 OOP -02

    单继承和多继承 单继承:每个类只能继承一个类 多继承:每个类可以继承多个类 单继承的多继承的优缺点 菱形继承/钻石...

  • 原型相关(二)

    1.继承 继承方式:接口继承(只继承方法签名)实现继承(继承实际的方法)ECMAScript只支持实现继承,并且主...

  • 继承

    继承的引入和概述 继承案例和继承的好处 继承的弊端 Java中继承的特点 继承的注意实现和什么时候使用继承 继承中...

  • Java面向对象三大特性之继承

    继承 一、继承的特点 Java只支持单继承单继承 多继承 单继承、多继承优缺点①单继承优点:提高了代码的复用性,让...

  • 7、面向对象的程序设计3(《JS高级》笔记)

    三、继承 许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际方法。由...

  • 【重学前端】JavaScript中的继承

    JavaScript中继承主要分为六种:类式继承(原型链继承)、构造函数继承、组合继承、原型式继承、寄生式继承、寄...

  • js之继承

    文章主讲 JS 继承,包括原型链继承、构造函数继承、组合继承、寄生组合继承、原型式继承、 ES6 继承,以及 多继...

网友评论

      本文标题:继承

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