2012-05-25 6 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 дозвонились тоже. Как мне это сделать? Это так, что мне не нужно возиться с кем-то кодом elses, но когда что-то происходит в их коде, я хочу, чтобы что-то случилось в моем. В родительском классе нет события.

+0

есть некоторые серьезные синтаксические ошибки в коде, вы уверены, что это то же самое как оригинал? – Esailija

+0

Исправлены ошибки синтаксиса. – beingalex

ответ

2

Что вы должны сделать, это переопределить метод DoStuff в MyBetterClass, а затем вызвать перекрытый метод на супер класс:

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

Это здорово - теперь родительский метод получает некоторые значения, а firebug сообщает, что 'this.values ​​undefined'. Есть ли способ сохранить эти значения и не получить ошибку? – beingalex

+1

Игнорируйте это, проработайте это :) Я люблю mootools. – beingalex

+0

Не видя кода, я не могу ответить на ваш вопрос очень хорошо, но если методу передаются какие-либо аргументы, они также будут переданы методу переопределения. Они не будут свойствами на этом, они будут аргументами функций, которые можно назвать или получить через коллекцию аргументов. –

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" 
Смежные вопросы