2011-08-30 72 views
1

中定義我正在使用「constructor chaining」來定義基類(超級)。確定成員是否在(Javascript)超類

function Super() { 
    this.member1 = 'superMember1'; 
    this.member2 = 'superMember2'; 
} 

function Sub() { 
    Super.call(this, arguments); 
    this.member3 = 'subMember3'; 
    var t = this.hasOwnProperty("member1"); // gives me true, so I cannot use it 
} 

我該如何測試一個成員(1,2,3)是在我的Sub類還是在Super類中定義(屬於)?

備註:`this [「name」]'不是方法,因爲我只能決定是否賦值 - 不是它屬於Super或Sub。

由於Darhazer評論下面,構造函數鏈複製成員,所以它可能會很棘手。

回答

0

顯然截至目前爲止的答案是不可能的。因此將被關閉。

0

您可以檢查未定義

if (typeof this.member1 == "undefined") { 
    //undefined 
} 
+0

這不起作用,因爲如果Super中的值有時未定義(沒有賦值),它將失敗。 –

+0

爲了記錄,我不認爲你應該將值分配給未賦值,但將它們設置爲null。但是,如果您需要這樣做,@ Darhazer的答案應該可以工作。 –

+0

絕對如此。只是爲了解釋... –

2

使用hasOwnProperty()檢查,如果該成員在當前類中定義。如果不是 - 顯然它是由超類定義的。

+0

不幸的是,這是*不*工作,因爲this.hasOwnProperty(「member1」);在Sub中給我真實的。有沒有人測試過這個,因爲我很欣賞答案,但它不起作用,已經得到2票。所以我要麼做錯了什麼,要麼我的場景不適用。 –

+0

@Horst Walter好吧,它似乎在構造函數鏈接主題中有很好的記錄,屬性被複制並且hasOwnProperty返回true;這隻適用於原型爲基礎的繼承:( –

+0

是的,我同意這一點,這就是爲什麼我問是否有某種方式來找到這一點 - 但我可以明確地勾勒出這個問題已經在這個問題上,很好的提示。繼承 - 在現實世界的代碼 - 從> 1類,所以我需要這個鏈接。但是,我感謝您的反饋。 –