2013-03-01 89 views
3

我使用Javascript繼承。我陷入了一種情況,我必須檢查第一個對象是否繼承第二個對象。例如:問題在繼承在JavaScript

function Parent(name) 
    { 
    var self = this; 

    self.Name = name; 

    self.Check = function() { 
     for(var i = 0; i < ChildCollection.length ;i++) 
     { 
      //here i want to check whether self is the object which is 
      //inherited in ChildCollection[i] 

      alert(true or false); 
     } 
    } 
    } 

    function Child(name) 
    { 
    var self = this; 

    Child.prototype.constructor = Child; 

    self.Name = name; 
    } 

    $(function() {  

     var ChildCollection = new Array() 

     for(var i = 1; i <= 2 ;i++) 
     { 
     Child.prototype = new Parent("TestParent_" + i);    
     var child = new Child("TestChild_" + i); 
     ChildCollection.push(child); 
     }    

     ChildCollection[1].Check(); 
    }); 

在上面的代碼我已經建立2類ParentChild。子繼承父項。我創建了一個包含所有子對象的全局數組ChildCollection。在父類存在,我想創建一個檢查功能,它應該通過ChildCollection陣列環,並檢查當前的對象裝置(個體或該)是否被遺傳或電流的一部分環繞子對象。

要很清楚我叫支票ChildCollection的第二個對象即ChildCollection[1].Check()上。如果我清楚或沒有錯誤比第一次警報應該是假的,第二次警報應該是真實的。

請我的GUID來解決這個問題,對不起,如果我是在完全在錯誤的軌道,並請解釋我什麼,我做錯了什麼?

回答

0

在上面的代碼我已經建立2類父母與孩子。子繼承父項。

你這樣做的方式是非常,非常不尋常的。您在每次使用前都會給Child一個新的和不同的原型。這可能不是你想要做的。 This other answer here on Stack Overflow提供了在JavaScript中進行繼承的「常用」方式的示例。我還寫了一個名爲Lineage的幫手腳本來減少涉及的打字。

我有建立一個全球ChildCollection數組,它包含所有子對象。

這不是一個全球性的,這是你的ready回調(你傳遞$()函數)內的變量。這不是從訪問那裏Parent您已經定義Parent,因此該行:

for(var i = 0; i < ChildCollection.length ;i++) 

...將失敗,ReferenceError

您可以修復,在以下三種方式之一:

  1. 傳遞ChildCollectionParent構造器作爲一個參數。

  2. 製作ChildCollection實際上是全球性的(我會避免)。

  3. 移動你的ParentChild功能ready回調,使他們有機會獲得它。

而實際上,以避免產生全局(ParentChild),但避免Parent依靠一個僞全球,你可以結合#1和#3。

重新代碼註釋:

在這裏,我要檢查自己是否是作爲 在ChildCollection [I]繼承

我不知道你所說的「是什麼意思對象在那句話繼承」,但如果你想知道是否selfChildCollection

var found = false; 
for(var i = 0; !found && i < ChildCollection.length; i++) { 
    if (ChildCollection[i] === self) { 
     found = true; 
    } 
} 
alert(found); 
+1

將在downvoter喜歡莎爾e關於爲什麼這個答案「沒有用」(使用downvote按鈕中的短語)的一些有用的反饋? – 2013-03-01 10:03:32

+1

+1的詳細答案,謝謝 – gaurav 2013-03-02 04:24:15