У меня есть объект, который наследует объект из 2 других объектов.Вызов суперкласса класса при множественном наследовании в DOJO
Я использую вручную вызвать для конструктора, потому что я хочу, чтобы манипулировать параметрами я посылаю супер классов (см '-chains-'
)
define([...], function(...) {
return declare("myClass", [base1, base2],
{
"-chains-":
{
constructor: "manual"
},
constructor: function (params) {
this.inherited(arguments, [ params.x, params.y, ... ]); // just for the example
}
});
});
Проблема заключается в том, что я делаю что-то здесь не так с синтаксисом потому что мои супер классы-конструкторы вообще не вызываются.
Когда я удаляю -chains-
и this.inherited...
вызываются конструкторы суперклассов, но без манипуляций с параметрами.
Найдено Обход
Вместо this.inherited(...)
в myClass
конструктор мы пишем
base1.prototype.constructor.apply(this, [paramsForBase1]);
base2.prototype.constructor.apply(this, [paramsForBase2]);
Но все-таки рад услышать то, как Dojo
Звучит безупречно. Спасибо. Обходным решением является: –
Если вы не хотите вручную вызывать все конструкторы, есть еще способ получить массив всех родителей и перебрать их через 'this.constructor._meta.parents'. Это все еще немного повторное использование. Я отредактировал свой ответ с дополнительной информацией. – g00glen00b
Да, я перебрался в додзё и увидел этих участников. Но мне не нравится использовать необъявленных членов любой библиотеки для случая, что в один прекрасный день они изменят/удаляют его с более новыми версиями, а затем мне придется иметь дело с снова.Но большое вам спасибо, вы очень помогли –