ES6 —— class类

1)概述

  • 在ES6中,class (类)作为对象的模板被引入,可以通过 class 关键字定义类

  • class 的本质是 function。

  • 它可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。

  • 类不可重复声明

  • 类定义不会被提升,这意味着必须在访问前对类进行定义,否则就会报错

2)类定义 

(1)声明类

        //类名要大写
        class Person {
            constructor(a) {
                this.x = a
            }
        }
        var p1 = new Person(2)
        console.log(p1);

    

 (2) 匿名类

        var fn = class {
            constructor(a) {
                this.x = a
            }
        }
        var f1 = new fn(2)
        console.log(f1);

 

3)类的主体

(1)属性:ES6的类中不能直接定义变量,变量被定义在constructor中。

        class Person {
            // Person类的内部可以写一个constructor方法,用这个类创建对象时,就会运行构造函数
            // 不写构造函数,系统会默认有一个空的构造函数运行
            constructor() {
                this.a = 886
            }
        }
        var p1 = new Person()
        console.log(p1.a);

(2)方法

        constructor 方法是类的默认方法,创建类的对象时被调用。也被称为类的构造方法(构造函数、构造器)。一个类中有且仅有一个构造方法。

        class Person {
            constructor() {
                console.log("hello");
            }
        }
        new Person()

         原型方法:不需要使用function关键字,通过“对象.原型方法”调用。

         class Person {
            say(a,b) {
                console.log(a*b);
            }
        }
        var p1 = new Person()
        p1.say(2,3)

         静态方法:使用static修饰,调用时不需要创建对象,直接通过“类名.静态方法”调用。

        class Person {
            static name = "xiaozhang"
        }
        var p1 = new Person()
        console.log(Person.name);

4)类的继承

  • 解决代码的复用

  • 使用extends关键字实现继承

  • 子类可以继承父类中所有的方法和属性

  • 子类只能继承一个父类(单继承),一个父类可以有多个子类

  • 子类的构造方法中必须有super()来指定调用父类的构造方法,并且位于子类构造方法中的第一行

  • 子类中如果有与父类相同的方法和属性,将会优先使用子类的(覆盖)

        class Person {
            life = 1
            constructor(name) {
                this.name = name
                this.say = function () {
                    console.log(this.name + ",你好");
                }
            }
            zz() {
                console.log(this.name + ",你真帅");
            }
            static str = "abc"
        }

        class Student extends Person {
            constructor(name) {
                super(name)
                this.age = 21
                this.height = 175
            }
        }

        var s1 = new Student("xiaozhang")
        console.log(s1);
        s1.say()
        s1.zz()
        console.log(Student.str);

 内部类:属于外部类的成员,必须通过“外部类.内部类”访问.

        // 外部类
        class Person {
            constructor() {
                console.log("abc");
            }
        }

        // 内部类
        Person.Children = class {
            constructor() {
                console.log(123);
            }
        }

        new Person.Children()

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z_小张同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值