ES6面向对象

  • 面向对象概念

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

    • 面向过程

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

    • 面向对象

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

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

  • ES6创建对象

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

  • 写法:

    //编写类
    class 类名{
        属性名 = 属性值
        方法名 = 函数
        ...
    }
    //通过类创建对象
    let 变量名 = new 类名()

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

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

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

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

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

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

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

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

    • 写法如下

      class 类名{
      	属性名 = 属性值
          方法名 = function(){}
          static 属性名1 = 属性值;//静态属性
          static 方法名1 = function(){};//静态方法
      }

      ES6中 类的继承

    • 直接继承

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

    • 写法:

      //现在有一个现成的父类
      class Parent{
          name = "张三";
          age = 18;
          say = function(){
              console.log(this.name);
          }
      }
      //现在有一个子类  想继承父类中的属性和方法
      class 子类 extends 父类{}
      class Child extends Parent{
          
      }

    • 继承带参数的父类

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

    • 写法如下

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

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

    • super详解

      • super函数

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

      • super对象

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

          class Parent{
              属性名 = 属性值//普通属性
              方法名 = function(){}//普通方法
              static 属性名1 = 属性值;//静态属性
              static 方法名1 = function(){};//静态方法
          }
          class Child extends Parenr{
              //我们在子类中 可以通过super对象 使用父类中的普通方法 静态方法 和 静态属性   唯独不能使用 普通属性
              static 静态方法名(){
                  console.log(super.父类静态属性名);
                  super.父类静态方法名()
              }
              
              普通方法(){
                  super.父类普通方法名()
              }
          }

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

  • 总结

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

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

      数组的方法 Array.of   Array.from   数组.find   数组.findIndex
      class Array1 {
          static of(){};
          static from(){};
          find(参数){
              
          };
          findIndex(){
              
          }
      }

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值