class 類

1、訪問類型 private protected public

  • public 允許在類的內(nèi)外被調(diào)用
class Person {
  name: string; // 默認為 public
  syaHi() {
    console.log(this.name);
  }
}

const person = new Person();
person.name = 'hzp';    // 類的外部可以調(diào)用
person.syaHi();         // 類的外部可以調(diào)用
  • private 只允許在類的內(nèi)部調(diào)用
class Person {
  private name: string; // private 類型
  syaHi() {
    console.log(this.name);
  }
}

const person = new Person();
person.name = 'hzp';    // 不被允許,因為name在類內(nèi)定義為private類型
person.syaHi();
class Person {
  firstName: string;            // public類型
  private lastName = 'Huang';   // private類型
  syaHi() {
    console.log(this.firstName + this.lastName);
  }
}

const person = new Person();
person.firstName = 'Zhenpeng';  // 可以賦值,因為firstName是public類型
person.syaHi(); // ZhenpengHuang
  • protected 允許在類內(nèi)及繼承的子類中使用
class Person {
  protected name: string;
  public syaHi() {
    this.name;          // 可以調(diào)用,protected允許在內(nèi)部和子類調(diào)用
    console.log('hi');
  }
}

class Teacher extends Person {
  public sayBye() {
    this.name;          // 可以調(diào)用,protected允許在內(nèi)部子類調(diào)用
  }
}

const person = new Person();
person.name = 'Zhenpeng';   // 不可以在類外部調(diào)用
person.syaHi();

2、constructor

constructor在類被實例化的時候被調(diào)用,可以接收參數(shù)

// 傳統(tǒng)寫法
class Person {
  public name: string;
  constructor(name: string) {
    this.name = name;
  }
}

const person = new Person('Hzp');
console.log(person.name);   // Hzp

上面的寫法和下面這一種是一樣的,簡寫:

// 簡化寫法
class Person {
  constructor(public name: string) {}
}

const person = new Person('Hzp');
console.log(person.name);   // Hzp

class Person {
  constructor(public name: string) {}
}

class Teacher extends Person {
  sayHi() {
    console.log(this.name);
  }
}
const teacher = new Teacher('hzp');
teacher.sayHi();    // hzp

錯誤寫法:

class Person {
  constructor(public name: string) {}
}

class Teacher extends Person {
  constructor(age: number) {    // 報錯,因為繼承了父類,父類的構(gòu)造器需要參數(shù)
    
  }
}
const teacher = new Teacher(28);

正確寫法:

class Person {
  constructor(public name: string) {}
}

class Teacher extends Person {
  constructor(public age: number) {
    super('Hzp');
  }
}
const teacher = new Teacher(25);
console.log(teacher.age);   // 25
console.log(teacher.name);  // Hzp

當繼承時,如果子類有contructor構(gòu)造器的話,就算父類沒有contructor構(gòu)造器,也需要在子類contructor構(gòu)造器中調(diào)用super(),如果父類構(gòu)造器有參數(shù)的話,要在super方法中傳遞進去。

class Person {
  
}

class Teacher extends Person {
  constructor(public age: number) {
    super();    // super也要被調(diào)用,不然會報錯
  }
}

3、readonly只讀屬性

class Person {
  public readonly name: string;
  constructor(name: string) {
    this.name = name;
  }
}

const person = new Person('Hzp');
console.log(person.name);
person.name = 'Huang';  // Cannot assign to 'name' because it is a read-only property.name為只讀屬性,不能修改
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容