2017-01-22 63 views
1

我有以下問題:我有一個類Foo,它覆蓋toString()的默認實現。當對象使用對象初始化時,不會調用Overriden toString()

class Foo { 
    bar: string; 

    toString(): string { 
     return this.bar; 
    } 
} 

當我初始化的(類型),一個新的變量對象文字和調用toString()這個新對象的標準JavaScript實現被稱爲上。因此,「[object Object]」被打印到控制檯中。

let foo : Foo = { 
    bar: "baz" 
} 


console.log(foo.toString()) // does not invoke Foo.toString() 

然而,當我創建對象的新運營商的一切就像一個魅力:

let foo: Foo = new Foo(); 
foo.bar = "baz" 
console.log(foo.toString()); // prints out "baz" 

我在做什麼錯?我想避免第二種選擇,因爲實際上Foo對象具有許多(嵌套的)屬性。這樣會導致非常詳細的對象初始化。

回答

1

你的第一個例子:

let foo : Foo = { 
    bar: "baz" 
} 

你創建一個對象文本,並聲稱它具有相同的接口Foo。它不是Foo的實際實例,因此它使用默認實現toString()

在你的第二個例子:

let foo: Foo = new Foo(); 

你正在創建的Foo實際情況其中有您的toString()覆蓋來實現。

+0

謝謝您的澄清。 –