javascript - Typescript-klass: kommer klassen att hoistas när jag använder två klasser?


bakgrund

1. klassen bör definieras i förväg

Jag vet att det inte finns något fel eftersom klassen är definierad på förhand.

class Polygon {
  log() { console.log('i am polygon'); }
}
const p = new Polygon();  // no error as I had expected.
p.log();

2. klass hoistas inte

Jag vet också orsaken till detta fel. Klassen höjs inte, så detta fel är mitt förväntade resultat.

const b = new Bolygon();  // Uncaught TypeError as I had expected.
b.log();
class Bolygon {
  log() { console.log('i am bolygon'); }
}

fråga

I vissa fall, som i denna kod (playground-länk), kommer klassen att hoistas?

Jag kan inte förstå varför new Hero() inte orsakar fel nedan. Är class Hero hoistad?

class AppComponent {
  hero = new Hero('foo') // why no error?
}
class Hero {
  constructor(public name: string){}
}

Svar #1

Anledningen är att denna rad:

hero = new Hero('foo')

Utvärderas endast när du instansierar AppComponent, vilket är efter att klassen Hero har utvärderats.
Däremot, i ditt andra kodexempel är denna rad:

const b = new Bolygon();

Utvärderas först, innan själva klassen har utvärderats.

Om du gör AppComponent.hero statisk kommer det att orsaka ett fel:

class AppComponent {
  static hero = new Hero('foo') // errro: Hero is not a constructor
}

Relaterade artiklar