наследование модуля dojo при создании экземпляра в другом классе

Учитывая следующее:

Parent имеет ParentsModule:

define([ParentsModule,...], 
function(ParentsModule,...) {
    return declare("Parent", ..., {

        someFunction: function(arg) {
            var a = new ParentsModule();
            a.doThis(arg);
        },
        ...
    )};
});     

Дочерний расширяет Родительский. Имеет ChildsModule

define([ChildsModule,Parent,...],
function(ChildsModule,Parent,... ) {
    return declare("Child", [Parent], {

        someFunction: function(arg) {
            this.inherited(arguments);
        },
        ...
    )};
});

ParentsModule делает это самостоятельно.

define([ParentsModule,...],
function(ParentsModule,... ) {
    return declare("ChildsModule", [ParentsModule], {
        doThis: function(arg) {
            //bunch of stuff happens here.
        },
    ...
    )};
});

ChildsModule расширяет ParentsModule.

define([...],
function(...) {
    return declare("ParentsModule",..., {
        doThis: function(arg) {
            return;
        },
    ...
    )};
});

Без редактирования «Parent», может a.doThis(arg);вызвать ChildsModule.doThis()вместо?

Можно ли переопределить модуль, экземпляр которого создается в функции родителя?

Родитель.некоторые функции имеют много кода, который я хотел бы использовать. Parent (и ParentsModule) — это класс, который был предоставлен мне, и я являюсь автором Child (и ChildsModule).

1 ответ

  1. Как насчет переопределения ParentsModule, загружаемого в первую очередь, и загрузки ChildsModule вместо этого? Конечно, это будет применяться ко всему коду, который пытается создать экземпляр ParentsModule — не уверен, является ли это проблемой или нет.

    var dojoConfig = { paths: { 'orig_code/ParentsModule': 'new_code/ChildsModule' } };

    Если вы не знакомы с dojoConfig; он должен быть помещен где-то перед загрузкой dojo. Если у вас уже есть один, просто добавьте к нему объект paths.