102 阅读2分钟

类: 实例化对象 父类 子类 超类 基类 继承

image.png

    /* 
     类
       实例化属性和方法  在实例化对象中会全部拥有
       静态属性和方法 在实例化对象中是不存在。只属于类本身

       Array
          实例化属性和方法
         push
         pop
         shift
         unshift

         静态属性和方法
         isArray
         from

         类是实例化对象的抽象表现
         实例化对象是类的具象化表现

         类和类之间才有继承

         超类:子类的父类叫做超类

  
         superClass 超类
    
         基类 基础类别

         Object就是基类
    
    */

类的例子

    class 人类{
       //全局变量
        脚=2;
        手=2;
        头=1;
        鼻子=1;
        姓名="";
        年龄=0;
        性别="";
        // static 静态 静态属性一旦创建不需要实例化在任何地方都可以调用,存储数据
        static history=5000;
        // 每个类中都有一个constructor,这个函数叫做构造函数
        // 可以理解为这个类当要实例化对象时,就会先执行这个构造函数,可以理解为初
        始化执行
        constructor(name,age,sex){
            // 当需要调用当前类中的属性和方法时,需要使用this
            // 这里的this指向实例化的对象-->小明(小明包含所有的全局变量)
            this.姓名=name
            this.年龄=age;
            this.性别=sex;
        }
        编程(){
            // this指的是实例化对象 谁调用该方法,this指向谁
            console.log(this.姓名+"会编程")
        }
        做饭(){
            console.log(this.姓名+"开始做饭")
        }
        static 蒸汽大发展(){
            // 静态方法中也可以使用this,这个this指的是当前类名(人类)
            console.log("人类开始蒸汽时代")
        }
        static 二战(){
            console.log("人类开始第二次世界大战")
        }

    }


    实例化对象创建   new 类名()  当new 类名()时会执行constructor函数,
    类名后面的()带入的参数将会传入到constructor函数里

    var 小明=new 人类("王小明",21,"男");
    小明这个对象有了 脚\手\头\鼻子\姓名\年龄这些属性 还有编程和做饭的方法

    console.log(小明)
    console.log(小明.姓名)
    console.log(小明.性别)

    小明.做饭();
    小明.编程();
    
   
   var 小雪=new 人类("李雪",22,"女");
   console.log( 小雪.姓名)
   console.log(小雪.年龄)
   小雪.做饭();
   小雪.编程();

静态属性和方法都需要使用类名调用
    console.log(人类.history)
    人类.二战();
    人类.蒸汽大发展();

类继承

    class 女人 extends 人类{
        // 人类的中所有属性和方法都会被女人继承
        constructor(name,age){
            // 执行超类的构造函数 执行超类(人类的构造函数),并且传参进入
            // 超类构造函数里的this将会指向当前实例化女人类的对象--》小雪
            super(name,age,"女");
        }
        // 这个方法在父类中没有的,所以这个方法属于女人这个类别新增的
        化妆(){
            console.log(this.姓名+"开始化妆")
        }
        做饭(){
            // console.log(this.姓名+"开始做饭")
            // 先执行超类的做饭方法
            // super指超类的某个方法
            super.做饭();
            console.log(this.姓名+"做汤")
        }
    }


    var 小雪=new 女人("王晓雪",21);
    小雪.化妆();
    小雪.做饭();
    console.log(小雪)