2014-01-09 2 views
0

Я пытаюсь создать базовый класс, который имеет createjs EventDispatcher функциональность, а затем создать вложенные классы из этого базового класса, но если бы я затем попытаться использовать addEventListener на экземпляре подкласса я получаю ошибку:CreateJS EventDispatcher и наследование

TypeError: _subClass.addEventListener is not a function 

конструкторы моих классов выглядеть следующим образом:

var BaseClass = function(id) 
{ 
    _instance = this; 
    _id = id; 
    createjs.EventDispatcher.initialize(BaseClass.prototype); 
}; 

var SubClass = function(id) 
{ 
    BaseClass.call(this, id); 
    SubClass.prototype = Object.create(BaseClass.prototype); 
    _instance = this; 
}; 

Как я могу заставить его работать так, что Подкласс наследует приложенное CreateJS событий функциональность диспетчера от BaseClass? До сих пор это работает только если я применить диспетчер событий в суб конструктор класса, но это как-то бросает вызов вся цель наследования:

createjs.EventDispatcher.initialize(SubClass.prototype); 
+1

Если вы используете EaselJS 0.7.0 или выше, вы можете наследовать от EventDispatcher вместо этого, что и классов EaselJS теперь делать. – Lanny

+0

Вы имеете в виду, что я должен использовать BaseClass.prototype = new createjs.EventDispatcher(); в моем базовом классе? Но даже это не устраняет мою проблему. – BadmintonCat

ответ

0

Вы должны инициализировать свои прототипы во время инициализации, а не в конструкторе. Вот обновленная скрипка: http://jsfiddle.net/lannymcnie/qTHb4/

var BaseClass = function(id) 
{ 
    _instance = this; 
    _id = id; 
}; 
createjs.EventDispatcher.initialize(BaseClass.prototype); 

var SubClass = function(id) 
{ 
    BaseClass.call(this, id); 
    _instance = this; 
}; 
SubClass.prototype = BaseClass.prototype; 
+0

Сделал это, но не работает. Все еще получаю ошибку. Кстати, инициализация происходит, когда в JS? Я полагаю, что это код, выполненный сразу после загрузки JS-файла? – BadmintonCat

+0

Если вы поместили его в конструктор, вам нужно подождать, пока не будет вызван конструктор (используя 'new class()'). Сценарий, который я опубликовал, работает с изменениями. Дайте мне знать, если у вас все еще есть проблемы. – Lanny

Смежные вопросы