首页 > 其他分享 >继承

继承

时间:2024-02-22 15:48:55浏览次数:21  
标签:function name 继承 age Dog Person prototype

继承的N种方式

子类能够使用父类的属性和方法

原型链继承

1.创建人的类

function Person(name, age) {
  this.name = name
  this.age = age
}

Person.prototype.say = function() {
  console.log('说话了')
}

const p1 = new Person('张三', 19)

 

2.创建狗的类

function Dog(name, age) {
  this.name = name
  this.age = age
}

Dog.prototype.say = function() {
  console.log('说话了')
}

const d1 = new Dog('大黄', 3)

3.狗继承自人的类

// 创建人的类
function Person(name, age) {
  this.name = name
  this.age = age
}

Person.prototype.say = function() {
  console.log('说话了')
}
function Dog() {}

// 此方式不推荐 子原型和父原型公用同一个原型
// Dog.prototype = Person.prototype
Dog.prototype = new Person()

const d1 = new Dog('大黄', 3)

以上则实现原型链继承但是会有以下问题:

  • 包含引用类型值的原型属性会被所有的实例共享

  • function Person(name, age) {
      this.name = name
      this.age = age
      this.hobby = []
    }
  • 创建子类的时候不能传递参数

借用构造函数继承

1.创建人的类

// 创建人的类
function Person(name, age) {
  this.name = name
  this.age = age
  this.hobby = []
}
2.通过 call 实现
function Dog(name, age) {
  Person.call(this, name, age)
}

const d1 = new Dog('大黄', 2)
const d2 = new Dog('小黄', 1)
d1.hobby = '吃吃吃'

组合式继承

// 创建人的类
function Person(name, age) {
  this.name = name
  this.age = age
}

Person.prototype.say = function() {
  console.log('说话了')
}
function Dog(name, age) {
  Person.call(this, name, age)
}

// 此方式不推荐 子原型和父原型公用同一个原型
// Dog.prototype = Person.prototype
Dog.prototype = new Person()

const d1 = new Dog('大黄', 3)
const d2 = new Dog('小黄', 2)

寄生式组合继承

Object.create 作用:

  1. 创建对象
  2. 将对象的proto 指向参数对象
// 创建人的类
function Person(name, age) {
  this.name = name
  this.age = age
}

Person.prototype.say = function() {
  console.log('说话了')
}
function Dog(name, age) {
  Person.call(this, name, age)
}

// 此方式不推荐 子原型和父原型公用同一个原型
// Dog.prototype = Person.prototype
Dog.prototype = Object.create(Person.prototype)

const d1 = new Dog('大黄', 3)
const d2 = new Dog('小黄', 2)

es6 类继承

class Person {
  say() {
    console.log('说话了')
  }
}

class Child extends Person {}

const child = new Child()
child.say()
 

标签:function,name,继承,age,Dog,Person,prototype
From: https://www.cnblogs.com/gu723411/p/18027460

相关文章

  • C++ 继承和派生
      ......
  • Java之泛型系列--继承父类与实现多个接口(有示例)
    原文网址:​​Java之泛型系列--继承父类与实现多个接口(有示例)_IT利刃出鞘的博客-CSDN博客​​简介本文介绍java如何用泛型表示继承父类并实现多个接口。用泛型表示某个类是某个类的子类或者实现了接口的方法为:<TextendsA&B&C> 用法1:全都是接口。对于本例来说:A、B......
  • 继承
    介绍语法好处细节本质......
  • java 8 接口默认方法多继承
    已知:publicinterfaceA{defaultvoidfun(){System.out.println("A");}}publicinterfaceBextendsA{defaultvoidfun(){System.out.println("B");}}publicinterfaceC{defaultvoidfun(){......
  • 无涯教程-Swift - 继承
    通常,一个类可以从另一个类继承方法,属性和函数。类可以进一步分类为子类和父类。子类  - 当一个类从另一个类继承属性,方法和函数时,称为子类父类  - 包含从其自身继承其他类的属性,方法和函数的类称为超类Swift4类包含调用和访问方法,属性,函数和覆盖方法的父类,此外,......
  • 面向对象的三大特性之继承
    面向对象的三大特性之继承一、什么是继承继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类。子类会“”遗传”父类的属性,从而解决代码重用问题(去掉冗余的代码)python中类的继承分为:单继承和多继承二......
  • 在Python中,子类继承父类并调用父类的构造方法有几种方式: 1. 如果子类没有重写`__init
    在Python中,子类继承父类并调用父类的构造方法有几种方式:1.如果子类没有重写`__init__`,实例化子类时,会自动调用父类定义的`__init__`¹。```pythonclassFather(object):  def__init__(self,name):    self.name=nameclassSon(Father):  passson=So......
  • “类图”之旅UML继承(泛化),实现,关联依赖,组合聚合.
     开启“类图”之旅说到对系统代码中的模型梳理,其实最好的方式还是使用UML类图。上个章节中老猫没有展开和大家分享UML类图,一个是由于篇幅的原因,第二个是老猫觉得类图对于咱们后续阅读框架源码以及底层设计模式有着相当大的帮助,所以很有必要将其作为单独一篇来和大家分享。如......
  • 2.WPF中控件类之间的继承关系
    在WPF中所有的控件都是继承DispatcherObject类,可以说在wpf中DispatcherObject是所有控件类的基类,而DispatcherObject却继承Object,而它所在的程序集是在WindowsBase.dll里。看一张图,wpf控件继承关系图 1.Shape类形状控件是WPF一大系列控件。WPF所有的形状控件都继承于Shape基......
  • C# 继承、多态性、抽象和接口详解:从入门到精通
    C#继承在C#中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类:派生类(子类)-从另一个类继承的类基类(父类)-被继承的类要从一个类继承,使用:符号。在以下示例中,Car类(子类)继承了Vehicle类(父类)的字段和方法:示例classVehicle//基类(父类){......