2014-01-29 66 views
0

我試圖從基類method.I獲得派生類型的名稱上課如下:若要從基類方法的派生類名

export class Base{ 
    public Add(value: any) { 

    } 
} 

class Derived extends Base{ 
    public Add(value: any) { 
     Base.prototype.Add.call(this, value); 
    } 
} 

我試着使用$ .TYPE(本)在Base類的Add()裏面給出類型作爲object.But而調試時的代碼類型顯示爲「Object(Derived)」。

有沒有辦法得到這個?

+0

如果你不介意我問,什麼是在做這個是你的原因是什麼?有可能比基類知道派生類的名稱更好的做事方式。 –

回答

0

第一個,你還沒有在你的代碼段中定義繼承。使用extendsTypescript中創建類繼承。

class Derived extends Base { 
.. 

- 訪問基類,你可以使用關鍵字super

public Add(value: any) { 
    super.Add.call(this, value); 
} 
+0

對不起。我只是把擴展。現在我編輯了我的代碼。是否有任何方法來獲得派生類名? –

+1

@SwarnaLatha看看[如何獲取對象名稱](http://stackoverflow.com/questions/332422/how-do-i-get-the-name-of-an-objects-type-in​​-javascript)實現。 –

0

每個對象都有一個constructor功能,你可以看看它的名稱屬性。

class Alpha { } 
var a = new Alpha(); 
alert((<any>a).constructor.name); // Alpha 

鏈接

你會注意到,我不得不投aanyconstructor屬性沒有在lib.d.ts中定義,我認爲這是因爲它的使用不鼓勵。縮小也會改變結果。我只會將其用於調試目的。

0

您需要使用構造函數的名稱屬性,像這樣:

class Base { 
    public Add(value: any) { 
     alert(this.constructor["name"]); // alerts 'Derived' in this example 
    } 
} 

class Derived extends Base { 
    public Add(value: any) { 
     super.Add(value); // use super to call methods on the base class 
    } 
} 

(new Derived).Add('someValue');