TypeScript访问修饰符,Es6Class类

80 阅读2分钟

什么是修饰符

修饰符就是一些关键字,可以用来限定类的成员的性质,访问修饰符的作用就是用于限制别人乱用类中的东西,比如说常见的 public 用来表示共有的属性或者方法,那一共有多少种修饰符呢?

  • public(公开):可以在任何地方访问
  • protected(受保持):可以在当前类和子类中访问,在类的外部无法访问
  • private(私有):只能在当前类中访问

修饰符.png

 enum Color {
        red,
        yellow,
        blue
    

    class Car {
        // 如果不加访问修饰符 则当前成员默认是公开的 所有人都可以访问的
        public color: Color
        constructor() {
            this.color = Color.red;
        }
        // 加了private之后,当前成员就只能在当前类中使用了!
        private run() {

        }
        // 加了protected之后,当前成员就只能在当前类或者子类中使用了!
        protected loadPeople() {

        }
    }

    let byd = new Car();
    class Audi extends Car {
        sayHi() {
            console.log(this.color)

        }
    }
    let audi = new Audi();

Class类

ES6引入了 Class(类)这个概念,作为对象的模板。

JS 中并没有一个真正的 class 原始类型, class 仅仅只是对原型对象运用语法糖。所以,只有理解如何使用原型对象实现类和类继承,才能真正地用好 class

class 类 继承

通过extends关键字实现类的继承

//es6继承 先声明父类,再声明子类,通过extends继承方法,通过super()继承属性
        //声明父类

  class User {
            constructor(name, password) {
                this.name = name
                this.password = password
            }
            showName() {
                console.log('用户名称', this.name);
            }
            showPass() {
                console.log('用户密码', this.password);
            }
        }
        class VipUser extends User {
            constructor(name, password, level) {
                super(name, password)
                this.level = level
            }
            showLevel() {
                console.log('用户等级', this.level);
            }
        }

        var vip = new VipUser('admin', '123456', 3)
        vip.showName()
        vip.showPass()
        vip.showLevel()

通过super关键字进行拓展父类构造器或方法

super作用

  1. 子类使用构造器constructor的时候,必须使用super关键字,用来扩展构造器
  2. 子类同名方法会覆盖父类同名方法,使用super关键字后则可以调用到父类的同名函数

    class Person {
        name;
        age;
        constructor(name, age) {
            this.name = name
            this.age = age
        }
        say() {
            return `我是${this.name},我今年${this.age}岁`
        }
    }

    class Student extends Person {
        money;
        constructor(name, age, money) {
            super(name, age)//必须先调用super,才能使用constructor,才能使用this对象
            this.money = money
        }
        say() {
            return `我是${this.name},我喜欢敲代码`
        }
        study() {
            return `我是${this.name},我喜欢敲干饭`
        }
    }
    let a = new Student("小王", 21, "100w")
    console.log(a);