2011-11-05 76 views
0

在Javascript中,我有一個從基礎對象繼承的子對象。我想從一個子對象中調用一個基類函數,但我得到一個錯誤,說這個函數不存在。從子類訪問/調用BaseClass函數

你能告訴我如何從一個子類中調用基類函數嗎?

function BaseClass() 
    { 
    this.render = function() 
    { 
     alert("BaseClass::render()"); 
    } 
    } 

    function ChildClass() 
    { 
    this.render = function() 
    { 
     alert("BaseClass::render()"); 

     // Now to CALL the base class render() function 
     this.baseRender = BaseClass.prototype.render; 
     this.baseRender(); // I get the error: "The function this.BaseRender() does not exist" 
    } 
    } 

    ChildClass.prototype    = new BaseClass(); // inherit from BaseClass 
    ChildClass.prototype.constructor = ChildClass;   // put the correct constructor reference back (not essential) 
+1

基類渲染函數未附加到基類原型。它附加到基類實例。如果您希望以您的方式使用它,請將其附加到基類原型。 –

+1

當我聽到人們談論JavaScript類時,它總是讓我感到:/ –

回答

1

編輯:好的,要麼我有點沒看你的代碼的最後兩行,或者你做了一個快速編輯後,我開始寫我的文章。

你沒有孩子班,你有兩個不相關的班。

另外BaseClass上的render()方法當前不是其原型的一部分,它被分配給每個使用new BaseClass()創建的實例。這意味着BaseClass.prototype.render未定義。

(你已經從較低爲大寫「B」在改變的情況下分配this.baseRender,並試圖打電話this.BaseRender()之間,但我認爲這可能只是一個錯字。)

我覺得最簡單的做你想做的事情是這樣的:

function BaseClass() 
{ 
    // instance init here 
} 

BaseClass.prototype.render = function() { 
    alert("BaseClass::render()"); 
} 

請記住,JavaScript並沒有真正的「類」。