TypeScript 类 和 构造器

TypeScript 中类的值,拥有 private, protected, public 三种访问类型

public 代表在类内外都可调用类的属性
private 代表只可以在类内部调用类的属性
protected 代表可以在类内和继承的子类中调用父类中的属性

来看看如何书写

class Man {
  public name: string;
  private age: number;
  protected say() {
    this.name  
  }
}

访问类型默认为写在属性值的前边 , 如果不写,则默认为 public 访问类型。
再来看看什么是类的内部,外部,和被继承的子类内部

class Man {
  public name: string
  private age: number
  protected say():{
    console,lob(this.name)  // 在类内就是在 class 的大括号内
  } 
}
const man = new Man()
man.name = 'lei'  // 类内的name属性在类外部被调用  可以被调用 因为name为public访问类型

class Women extends Man {
   public sayHi() {
      this.name  // 可以访问   被继承的子类内部访问父类的 public 访问类型
      this.say()  // 此时这里会报错 ,因为父类中的 say 方法是 protected 访问类型,仅可在父类内部访问
    }
}

上边就是类的三种访问类型

下边看一下类中的构造器 constructor
在实例化类的时候,构造器会被调用,如果构造器需要参数,则在实例化的时候传入参数,构造器会接收到

class Man {
  constructor(public name: string) {}
}
const man = new Man('lei') // 实例化时构造器将被执行,传入字符串参数

在构造器中,构造器的参数可同时被声明为类中的属性,简化写法,来看看传统写法和简化写法

class Man {
  // 传统写法
  public name: string
  constructor(name: string) {
    this.name = name
  }
  // 简化写法
  constructor(public name: string) {}  // 等价于上边的传统写法
}

在子类中调用父类的构造器用 super 调用 ,而且在子类中使用构造器, 必须在构造其中调用 super ,即使父类中没有构造器 , 也必须在子类的构造其中调用 super

class Man {
  public name: string
  constructor(name: string) {
    this.name = name
  }
}
class WoMen extends Man {
  constructor() {
    super('lei')
  }
}

如果父类构造器有形参,则super需要传入实参,super的参数将会传入父类构造器的形参

OK!! 下一次说一下我们为什么要为类写入访问类型呢 ,它的作用是什么

886

你可能感兴趣的:(TypeScript 类 和 构造器)