• js---es5和es6实现面对对象继承


    一.es5

    构造函数相当于类

    父类的属性通过构造函数this对象进行初始化,父类的方法通过在prototype原型对象上挂载,供所有的实例对象使用,减少内存浪费

    子类继承父类的属性通过call方法借调父类的构造函数进行父类属性继承,子类特有的属性同样通过this来初始化,子类继承父类的方法通过...展开运算符对父类prototype原型对象进行浅拷贝,子类特有的方法同样通过子类的prototype原型对象上挂载方法,供所有实例对象使用。

    案例:

    1. //父类
    2. function Father(name, age) {
    3. // 父类的属性
    4. this.name = name
    5. this.age = age
    6. }
    7. //父类的方法
    8. Father.prototype.say = function () {
    9. console.log(this.name + '会说话');
    10. }
    11. // 子类
    12. function Son(name, age, school) {
    13. //继承父类的属性
    14. Father.call(this, name, age)
    15. //子类自己的属性
    16. this.school = school
    17. }
    18. //子类继承父类的方法
    19. Son.prototype = { ...Father.prototype }//浅拷贝
    20. Son.prototype.constructor = Son
    21. //子类自己的方法
    22. Son.prototype.toSchool = function () {
    23. console.log(`${this.name}去${this.school}学校`);
    24. }
    25. const son = new Son('h', 21, 'gxkj')
    26. //父类方法
    27. son.say()
    28. // 自己的方法
    29. son.toSchool()

    二、es6

    通过class关键字声明类

    父类的属性初始化在constructor构造器中进行初始化,方法直接书写在类中

    子类的属性在constructor构造器中进行初始化,继承父类的属性通过在子类的constructor构造器中

    通过super函数调用父类的构造器,自己特有的属性通过this进行初始化,子类自动会继承父类的方法,自己特有的方法直接书写在子类中

    1. //父类
    2. class Father {
    3. //父类构造器中进行实例对象属性的初始化
    4. constructor(name, age) {
    5. // 父类的属性
    6. this.name = name
    7. this.age = age
    8. }
    9. //父类的方法
    10. say() {
    11. console.log(this.name + '会说话');
    12. }
    13. }
    14. // 子类
    15. class Son extends Father {
    16. //子类构造器中进行实例对象属性的初始化
    17. constructor(name, age, school) {
    18. // 继承父类的属性
    19. super(name, age)
    20. // 子类自己的属性
    21. this.school = school
    22. }
    23. //父类方法自动继承
    24. //子类自己的方法
    25. toSchool() {
    26. console.log(`${this.name}${this.school}学校`);
    27. }
    28. }
    29. //测试
    30. const son = new Son('h', 21, 'gxkj')
    31. //父类方法
    32. son.say()
    33. // 自己的方法
    34. son.toSchool()

  • 相关阅读:
    IntelliJ IDEA-Debug断点调试 看这篇文章就够了
    解决json_decode解析返回null空值
    [附源码]计算机毕业设计JAVA潮流服饰网店平台
    关于android studio 新建项目 是否勾选 use legacy android.support libraries
    【最小生成树的用法总结】
    .NET7 gRPC JSON转码+OpenAPI
    DAZ To UMA⭐一.DAZ简单使用教程
    记录一些C++用法
    JS 防抖封装方法
    下一代架构设计:云原生、容器和微前端的综合应用
  • 原文地址:https://blog.csdn.net/h18377528386/article/details/126866857