2017-03-06 364 views
4

我開始了在angular2,而現在我已經得到了myHero頂部初始化我想了解一下這個代碼組件類變量的初始化

export class HeroesComponent implements OnInit { 

    // Version 1 
    myHero: Hero = new Hero('Superman', 'Clark Kent'); 

    // Version 2, 3 
    // myHero: Hero; 

    constructor() { 
     // Version 2 
     // this.myHero = new Hero('Superman', 'Clark Kent'); 
    } 

    ngOnInit() { 
     // Version 3 
     // this.myHero = new Hero('Superman', 'Clark Kent'); 
    } 

} 

,但我想知道,是什麼在頂部,應該在構造函數內部以及ngOnInit內部進行什麼?

因爲據我所知,如果它在頂部,它會立即執行,與構造函數和ngOnInit一樣?

那麼有什麼區別,什麼是正確的?

謝謝

回答

5

分配的聲明,並在構造函數中的值是完全一樣的,其實這個編譯版本:

class HeroesComponent implements OnInit { 
    myHero: Hero = new Hero('Superman', 'Clark Kent'); 
} 

是:

var HeroesComponent = (function() { 
    function HeroesComponent() { 
     this.myHero = new Hero('Superman', 'Clark Kent'); 
    } 
    return HeroesComponent; 
}()); 

至於與ngOnInit相比,它取決於Hero的構造函數是否依賴於任何可能在之前未做好準備的事情被解僱。