ES6: 类

1. 概述

ES6 提供了更接近语言的写法,引入了Class(类)这个概念,作为对象的模版。
通过class关键字,可以定义类。基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面对对象编程的语法而已。


2. 声明调用

语法:

<script>
    class Person {
        //构造方法
        constructor(name, age) {
            this.name = name;
            this.age = age;
        }
        eat() {
                console.log('我会吃饭');
            }
    }
     let me = new Person('xy', 20);
     me.eat();
</script>

通过class+类名构造类,其中有个构造方法constructor,这是类中的特殊方法,当类实例化后自动调用。
方法声明写在构造方法之外


3. 类的本质

在ES6之前,我们都是通过构造函数+原型实现面向对象编程。
在ES6之后,我们通过来实现面向对象编程
类的本质其实还是一个函数,我们也可以简单的认为,类就是构造函数的另一种写法

我们知道构造函数有以下特点:

  1. 构造函数具有原型对象prototype
  2. 构造函数原型对象prototype里面有constructor指向构造函数本身
  3. 构造函数可以通过原型对象添加方法
  4. 构造函数创建的实例对象有__proto__对象原型指向构造函数的原型对象

带着以上特点我们去看类

<script>

    class Person {

    }
    // 1. 构造函数具有原型对象prototype
    console.log(Person.prototype);
    // 2. 构造函数原型对象prototype里面有constructor指向构造函数本身
    console.log(Person.prototype.constructor);
    // 3. 构造函数可以通过原型对象添加方法
    Person.prototype.eat = function () {
        console.log('hello');
    }
    // 4. 构造函数创建的实例对象有__proto__对象原型指向构造函数的原型对象
    var xy = new Person;
    console.log(xy.__proto__);
</script>

显示结果:
在这里插入图片描述


4. 类的继承

类的继承通过 extends 关键字实现,子类通过 super 方法获得父类属性。
如下:子类通过extends继承父类,通过super方法继承name、age属性。

   <script>
        class Father {
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }
            eat() {
                console.log('我会吃饭');
            }
        }
        class Son extends Father {
            constructor(name, age, sex) {
                super(name, age);
                this.sex = sex;
            }
            game() {
                console.log('我会玩游戏');
            }
        }
        let xy = new Son('xy', 20, '男');
        console.log(xy);
    </script>

在这里插入图片描述
ES6的继承使得代码更清晰容易理解,这里可对照ES5的继承实现


5. 对父类方法的重写

在子类中直接声明一个与父类同名函数即可进行重写,如:

<script>
    class Father {
        constructor(name, age) {
            this.name = name;
            this.age = age;
        }
        eat() {
            console.log('我会吃饭');
        }
    }

    class Son extends Father {
        constructor(name, age, sex) {
            super(name, age);
            this.sex = sex;
        }
        game() {
            console.log('我会玩游戏');
        }
        eat() {
            console.log('我会吃零食');
        }
    }

    let xy = new Son('xy', 20, '男');
    xy.eat();
</script>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值