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
}
