継承と修飾子のメンバー

基本的な実装クラス

Dogクラスを定義し、ESが異なるのは、私たちはメンバー属性の型注釈を追加したということですが、また、コンストラクタにパラメータとして注釈の種類が増加します。

class Dog {
  constructor(name: string) {
    this.name = name
  }
  name: string
  run() {}
}

需要注意的是:
    (1)无论是在ES还是ts中,类成员的属性都是实例属性,而不是原型属性;类成员的方法也都是实例方法。对比可见:
  console.log(Dog.prototype) // {run: ƒ, constructor: ƒ}
  let dog = new Dog('wangwang')
  console.log(dog) // Dog {name: "wangwang"}
  (2)与ES不同的是,实例的属性必须具有初始值,或者在构造函数中被初始化。 以下√的三种方式均是可以的:

  class Dog {
    constructor(name: string) {
      // this.name = name   √
    }
    // name: string = 'dog'   √
    // name?: string = 'dog'   √
    run() {}
  }

クラス継承(使用はキーワード拡張します)

class Husky extends Dog {
  constructor(name: string, color: string) {
    super(name)
    this.color = color
  }
  color: string
}

注:
(1)派生クラスのコンストラクタは、「スーパー」コールが含まれている必要があり、パラメータとパラメータは、親クラスが含まれている必要があります。
(2)新たに追加されたプロパティは、一般的にはコンストラクタで初期化され、これがスーパーコールの後に呼ばれるように使用されます。

(ESのTSの拡張である)の修飾子のクラスのメンバー

公共のメンバー:すべて表示されている、パブリック+フォーマット属性/関数名
のプライベートメンバーは、また、それ自体でクラスで呼び出すことができ、それはクラスのインスタンスは、サブクラスによって呼び出すことはできません呼び出すことができない、プライベート+フォーマット属性/関数名

class Dog {
  constructor(name: string) {
    this.name = name
  }
  name: string
  run() {}
  private pri() {}
}
let dog = new Dog('wangwang')
dog.pri()   ❌
class Husky extends Dog {
  constructor(name: string) {
    super(name)
    this.pri()   ❌
  }
}

PS:
    也可以给构造函数加上私有成员属性,作用是类既不能被实例化,也不能被继承,都会提示错误。

  class Dog {
    private constructor(name: string) {
      this.name = name
    }
    name: string
  }
  let dog = new Dog('wangwang')   ❌
  class Husky extends Dog { }   ❌

format属性/関数名+保護部材は、クラスまたはサブクラスにのみアクセスすることができるが、このクラスのインスタンスにアクセスすることができない、保護されました。

class Dog {
  constructor(name: string) {
    this.name = name
  }
  name: string
  protected pro() {}
}
let dog = new Dog('wangwang')
dog.pro()   ❌
class Husky extends Dog {
  constructor(name: string) {
    super(name)
    this.pro()     ✔
  }
}

PS: 
  构造函数也能被声明为protected,作用是这个类不能被实例化,只能被继承,就相当于声明了一个基类。
  class Dog {
    protected constructor(name: string) {
      this.name = name
    }
    name: string
  }
  let dog = new Dog('wangwang') // ❌
  class Husky extends Dog {
    ......
  }

読み取り専用属性:それは初期化されなければならないインスタンス属性のようにそれを覚えて変更することはできません。

class Dog {
  constructor(name: string) {
    this.name = name
  }
  name: string
  readonly legs: number = 4
}

コンストラクタパラメータ改質剤が添加されてもよい、その役割は、インスタンスのプロパティに自動的にパラメータであり、クラスの定義で省略することができます。

class Husky extends Dog {
  constructor(name: string, public color: string) {
    super(name)
    this.color = color
  }
  // color: string
}

静的メンバー:クラスのみの形式の静的修飾子+プロパティ名ではなく、呼ばれるサブクラスを通じて、それが継承することができ、名前で呼び出すことができます。

class Dog {
  constructor(name: string) {
    this.name = name
  }
  name: string
  static food: string = 'bones'
}
let dog = new Dog('wangwang')
console.log(Dog.food) // ✔
// console.log(dog.food) ❌    
class Husky extends Dog {
  constructor(name: string, public color: string) {
    super(name)
    this.color = color
  }
}
console.log(Husky.food)  // ✔

おすすめ

転載: www.cnblogs.com/xfxing/p/12652423.html