TypeScript 类中的访问类型和构造器

访问类型有 private, protected, public
class Person {
  name: string;
  public sayHi() {
    console.log(this.name); // 类内调用
  }
}

class Teacher extends Person{
  public sayBye() {
    this.name;
  }
}
const person = new Person();
person.name = 'zina';
console.log(person.name); // 类外调用
person.sayHi(); // 类外调用

这里可以对属性进行赋值和取值,是因为类中属性方法默认是 public

* public: 允许我在类对内外被调用
* private: 允许我在类内被使用
* protected: 允许在类内及继承的子类中使用



class Person {
  public name: string;
  constructor(name: string){ // 调用的时候自动执行
    this.name = name;
  }
}
const person = new Person('zina');
console.log(person.name);
// 想给属性赋值的时候,比较传统的写法是先定义一个 name 属性
// 然后在构造器里面赋值,有没有更简单的方法,是有的



class Person1 {
  // 调用的时候自动执行
  constructor(public name: string){}
}
const person1 = new Person1('zina');
console.log(person.name);
// 在参数前加一个访问类型,加一个 public ,等同于定义一个 name 并赋值



class Person2 {
  constructor(public name: string){}
}
class Teacher extends Person2{
  /**
  * 子类定义了一个age,在创建的时候也传递了,还是会报错,因为继承了 Person2
  * @param age
  */
  // constructor(public age:number){}
  constructor(public age:number){
    super('zina'); // 如果子类有构造器,父类也有构造器,这个时候子类就一定要手动的调用下父类的构造器
  }
}
const teacher = new Teacher(28);
console.log(teacher.name, teacher.age)



总结:
1、访问类型:
* public: 允许我在类对内外被调用
* private: 允许我在类内被使用
* protected: 允许在类内及继承的子类中使用
2、
class Person1 {
  constructor(public name: string){} // 自动执行
}
// 等同于
class Person {
  public name: string;
  constructor(name: string){ // 自动执行
    this.name = name;
  }
}
3、super
如果子类有构造器,这个时候子类就一定要手动的调用下父类的构造器,super()