2017-03-06 81 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的构造函数是否依赖于任何可能在之前未做好准备的事情被解雇。