2017-02-10 87 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!'; 

你没有这样做。但是你的代码应该会给你一个编译时错误