2017-02-10 75 views
1

鑑於兩類,ClassA和`ClassB的打字稿超()與新的()

ClassA{ 
    public foo; 
    constructor(){ 
     this.foo = 'hey!'; 
    } 
} 

之間有什麼區別:

ClassB extends ClassA{ 
    constructor(){ 
     super(); 
    } 
} 

ClassB{ 
    private a; 
    constructor(){ 
     this.a = new ClassA(); 
    } 
} 

我之所以問這是因爲我實施了第一種方案,但每當我撥打super.foo時,我都會收到undefined,但如果我從第二種情況調用this.a.foo,則會得到該值。

調用super()和實例化父類的新實例有什麼區別? 我使用打字稿2.1.5

回答

1

,如果我嘗試

class A{ 
    public foo; 
    constructor(){ 
     this.foo = 'hey!'; 
    } 
} 

class B1 extends A{ 
    constructor(){ 
     super(); 
    } 
} 

class B2 { 
    public a; 
    constructor(){ 
     this.a = new A(); 
    } 
} 

console.log(new B1().foo) 
console.log(new B2().a.foo) 

我得到哎在這兩種情況下。什麼是你

this.foo = 'hey!'; 

你沒有這樣做。但是你的代碼應該會給你一個編譯時錯誤