Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Расширение классов (https://javascript.ru/forum/extjs/29288-rasshirenie-klassov.html)

Eugent 22.06.2012 10:34

Расширение классов
 
Привет всем!

Есть проект с 3 модулями, большая часть функционала которых похожа. Решил сделать 1 модуль-ядро, объединяющий в себе этот общий функционал. Сделал этот модуль рабочим с полной MVC-структурой, теперь хочу остальные сделать так, чтобы они по сути наследовались от этого модуля-ядра.

Вопросы такие:
- при наследовании от ядра лучше создать аналогичную структуру с наследованием от аналогичных элементов модуля-ядра или есть какой-то более рациональный способ?
- наследование правильнее делать через override или define вида
//представление дерева модуля-ядра
	Ext.define('Project.common.view.Tree' ,{
		extend	: 'Ext.tree.Panel',
		alias 	: 'widget.systemtree',
		...
	});
	//представление дерева модуля-наследника
	Ext.define('Project.viewer.view.Tree' ,{
		extend	: 'Project.common.view.Tree',
	   ...
	});

Ex_Soft 22.06.2012 10:45

Цитата:

Сообщение от Eugent (Сообщение 183234)
- наследование правильнее делать через override или define вида

тынць

DjDiablo 22.06.2012 11:14

Define - верным путём идёте товарищ.
Вот только правильнее это называть не ядром, а базовым классом.

Eugent 22.06.2012 11:49

Цитата:

Сообщение от DjDiablo (Сообщение 183246)
Define - верным путём идёте товарищ.
Вот только правильнее это называть не ядром, а базовым классом.

Это не класс - это полностью рабочий автономный проект, поэтому назвать всю эту толпу mvc-классов одним классом язык не поворачивается.

Eugent 22.06.2012 11:51

а для общего развития - override для чего вообще используется?

DjDiablo 22.06.2012 12:47

грубо говоря
define обьявляет класс
create- создаёт экземпляр
override изменяет существующий класс/экземпляр класса, производит переопределение/перегрузку

пример 1) перегрузка метода в экземпляре класса.
var panel = new Ext.Panel({ ... });

 Ext.override(panel, {
     initComponent: function () {
         // ваш добавленный функционал

         this.callParent();
     }

 });


пример 2) перегрузка метода в обьявленном классе
Ext.define('My.Cat', {
    constructor: function() {
        alert("I'm a cat!");
    }
});

My.Cat.override({
    constructor: function() {
        alert("I'm going to be a cat!");

        this.callParent(arguments);

        alert("Meeeeoooowwww");
    }
});

var kitty = new My.Cat(); // alerts "I'm going to be a cat!"
                          // alerts "I'm a cat!"
                          // alerts "Meeeeoooowwww"


Часовой пояс GMT +3, время: 20:05.