2012-05-25 50 views
0

我有這樣的代碼:mootools的擴展

var MyClass = new Class({ 
    Implements: [Options,Events], 
    initialize: function(){ 

    }, 
    doStuff: function() { 
     console.log('In MyClass'); 
    } 
}); 


var MyBetterClass = new Class({ 
    Extends: MyClass, 
    initialize: function() { 

    }, 
    doExtraStuff: function() { 
     console.log('In MyBetterClass'); 
    }   
});  

var a = new MyBetterClass(); 

doStuff某處叫我希望doExtraStuff到被調用了。我會如何去做這件事?這樣我就不必亂七八糟了,但是當他們的代碼發生什麼事情時,我希望我的其他事情能夠發生。在父課堂中沒有發生任何事件。

+0

有在你的代碼中的一些嚴重的語法錯誤,你確定這是相同的作爲原始? – Esailija

+0

修復了語法錯誤。 – beingalex

回答

2

你應該做的是覆蓋MyBetterClass的doStuff方法,然後調用重寫的方法在超類:

var MyClass = new Class({ 
    Implements: [Options,Events], 
    initialize: function(){ 

    }, 
    doStuff: function() { 
     console.log('In MyClass'); 
    } 
}); 


var MyBetterClass = new Class({ 
    Extends: MyClass, 
    initialize: function() { 

    }, 
    doStuff: function() { 
     this.parent(); 
     console.log('In MyBetterClass'); 
    }   
});  

var a = new MyBetterClass(); 
+0

這太好了 - 現在,父方法正在傳遞一些值,並且螢火蟲報告「this.values未定義」。有沒有一種方法來保持這些值,並沒有得到錯誤? – beingalex

+1

忽略它,解決了它:)我喜歡mootools。 – beingalex

+0

沒有看到代碼,我無法很好地回答你的問題,但如果方法正在傳遞任何參數,它們也會傳遞給override方法。它們不會是屬性,它們將是函數參數,可以通過參數集合進行命名或訪問。 –

3

不能調用父類中的子類的方法。您可以覆蓋父類的doStuff方法,通過子類的parent屬性調用父方法,然後實現您自己的代碼。

超級類

var MyClass = new Class({ 
    Implements: [Options,Events], 
    initialize: function(){ 

    }, 
    doStuff: function() { 
     console.log('In MyClass'); 
    } 
}); 

子類

var MyBetterClass = new Class({ 
    Extends: MyClass, 
    initialize: function() { 

    }, 
    doStuff: function() { 
     this.parent(); 
     console.log('In MyBetterClass'); 
     // your own implementation of this method 
    }   
}); 

然後

var a = new MyBetterClass(); 
a.doStuff(); // prints on console "In MyClass" and "In MyBetterClass"