• ES6面向对象


    • 面向对象概念

      • 面向对象是一种以对象为中心的编程思想。面向对象是相对于面向过程来讲的,面向对象把相关的数据 和方法组织为一个整体来看待,从更高的层次来进行系统建模。

      • 面向过程

        • 面向过程思想强调的是步骤,当碰见问题时,思考的是“我该怎么做”,分析出解决问题所需要的步骤, 一步步的去实现。 例如:想吃蛋炒饭,首先想到的是我要如何做,包括哪些步骤。比如:起锅烧油,加入鸡蛋,加入米 饭,加入调料,翻炒,装盘等。

      • 面向对象

        • 面向对象思想强调的是对象,当碰见问题时,思考的是“我该让谁来做”。这个“谁”其实就是对象。找合适 的对象做合适的事情。而对象如何去做(采用什么样的步骤)我们就不关心了,最终把问题解决掉就可以 了。 例如:还是想吃蛋炒饭,首先想到的是让谁来帮我做蛋炒饭,比如找厨师来帮我做蛋炒饭。具体厨师如 何去做这个蛋炒饭,做饭的步骤是怎么样的我们并不关心。只要最终把蛋炒饭做好就可以了。

          • 遇到问题找对象,有对象就用对象,没有对象就创建对象来解决问题

    • ES6创建对象

    • 在ES6中 我们通过类来创建对象 类其实是总和了 构造函数 和 原型

    • 写法:

      1. //编写类
      2. class 类名{
      3. 属性名 = 属性值
      4. 方法名 = 函数
      5. ...
      6. }
      7. //通过类创建对象
      8. let 变量名 = new 类名()

    • 注意:属性会直接添加给实例对象 方法 则添加给原型对象
    • 在ES6中 类是专门用来创建对象的 相当于对象的模板

      • 在ES6中 对象和类的关系是 类是对象的模板 对象是类的实例

    • ES6中 通过类 创建 需要传参的对象

      1. //在需要传参的时候 如果想让类 能够接收参数 需要单独编写类的构造器 constructor
      2. //写法如下
      3. class 类名{
      4. constructor(形参1,形参2,...){
      5. this.属性名1 = 形参1
      6. this.属性名2 = 形参2;
      7. ...
      8. this.方法名 = function(){}
      9. }
      10. }
      11. //通过类创建对象
      12. let 变量名 = new 类名(实参1,实参2,...)

    • 注意:构造器中的this 指向实例对象 所以 构造器就是通过this 再给实例对象 添加属性和方法
      • 注意:通过构造器添加的属性和方法 都是直接绑定在实例对象自身上的

    • ES6中 给类设置静态属性和方法

      • ES6中的类 存在一些特殊的属性和方法——静态属性 和 静态方法

      • 这类方法和属性 只能由 类来使用 而不是 由实例对象来使用

      • 写法如下

        1. class 类名{
        2. 属性名 = 属性值
        3. 方法名 = function(){}
        4. static 属性名1 = 属性值;//静态属性
        5. static 方法名1 = function(){};//静态方法
        6. }

        ES6中 类的继承

      • 直接继承

      • :在es6中 如果子类 想 继承父类的属性和方法 可以通过一个关键字——extends

      • 写法:

        1. //现在有一个现成的父类
        2. class Parent{
        3. name = "张三";
        4. age = 18;
        5. say = function(){
        6. console.log(this.name);
        7. }
        8. }
        9. //现在有一个子类 想继承父类中的属性和方法
        10. class 子类 extends 父类{}
        11. class Child extends Parent{
        12. }

      • 继承带参数的父类

      • :如果父类本身 需要传参 子类在继承的时候 除了使用extends关键字之外 还需要 使用一个函数——super

      • 写法如下

        1. //现在有一个现成的父类
        2. class Parent{
        3. constructor(gender){
        4. this.gender = gender
        5. },
        6. name = "张三";
        7. age = 18;
        8. say = function(){
        9. console.log(this.name);
        10. }
        11. }
        12. //现在有一个子类 想继承父类中的所有属性 但是父类中gender属性需要传参
        13. class 子类 extends 要继承的父类{
        14. constructor(gender1){
        15. //在子类的constructor构造器的最开头 要先调用super方法 继承父类构造器中的属性和方法,并将实参 传入super函数中 通过super函数 将实参 传给父类
        16. super(gender1);
        17. }
        18. }
        19. let obj = new 子类("男"

      • 注意:super的调用 必须写在子类构造器的最开头
        • 说明:其实 调用super函数 相当于 调用继承的父类的构造器

      • super详解

        • super函数

          • super函数 可以帮助我们 继承到需要传参的父类中构造器中的属性和方法

        • super对象

          • super对象 则可以在子类中 帮助我们获取父类中的属性和方法(不包括普通属性)

            1. class Parent{
            2. 属性名 = 属性值//普通属性
            3. 方法名 = function(){}//普通方法
            4. static 属性名1 = 属性值;//静态属性
            5. static 方法名1 = function(){};//静态方法
            6. }
            7. class Child extends Parenr{
            8. //我们在子类中 可以通过super对象 使用父类中的普通方法 静态方法 和 静态属性 唯独不能使用 普通属性
            9. static 静态方法名(){
            10. console.log(super.父类静态属性名);
            11. super.父类静态方法名()
            12. }
            13. 普通方法(){
            14. super.父类普通方法名()
            15. }
            16. }

          • 注意:子类中如果想使用父类的静态属性和静态方法 需要 用在 自己的静态方法中
            • 注意:子类中如果想使用父类的普通方法 也需要在普通方法中使用

    • 总结

      • 面向对象 在实际开发中 用的不多 我们实际开发中 用的更多的是 面向过程思想

      • 面向对象更多的使用在 框架的开发中,例如

        1. 数组的方法 Array.of Array.from 数组.find 数组.findIndex
        2. class Array1 {
        3. static of(){};
        4. static from(){};
        5. find(参数){
        6. };
        7. findIndex(){
        8. }
        9. }

     

  • 相关阅读:
    手动开发-实现SpringMVC底层机制--小试牛刀
    Flink-水位线的设置以及传递
    信息学奥赛一本通-编程启蒙3097:练17.3 比大小
    SpringBoot配置文件
    48从零开始用Rust编写nginx,搭建一个简单又好看官方网站
    Rust语言有些情况一直卡住的解决方法
    【Day-30慢就是快】代码随想录-二叉树-找树左下角的值
    从408改考自主命题,211贵州大学考研改考
    基于JAVA医院出入院管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    通过Java定时取消Greenplum的慢查询
  • 原文地址:https://blog.csdn.net/weixin_64037609/article/details/127044094