JavaScript: Как правильно реализовать возможность «замены/подмены» конструктора в классе при его создании и наследовании? Добрый день.
Есть самописная библиотека для создания и наследования классов ( код на pastebin ) ( код ниже показывает создание класса из набора параметров/функций ).var newClass = classConstructor; // Функция - конструктор
// Проходим по списку функция и прописываем их в создаваемый класс
...
Пытаюсь реализовать что-то наподобии:var newClass = function( )
{
var callArguments = ( arguments.length > 0 ? arguments : arguments.callee.caller.arguments );
this[ '___con' ].apply( this, callArguments );
};
newClass.prototype.___con = classConstructor;
Это необходимо в связи с тем что все функции в prototype в последующем - проксируются ( заменяются на вызов aplly + вызов спец. функции ), и хочется реализовать это и для конструктора.
Но по какой-то причине ничего не выходит, а получается вечный цикл на моментах последующего наследования.
В чём может быть причина?
Или как сделать это по другому?

21 Авг 2019 в 07:07
149 +1
0
Ответы
1

Для реализации замены/подмены конструктора в классе при создании и наследовании в JavaScript можно воспользоваться шаблоном фабрики классов. Вот пример такого подхода:

function ClassFactory(constructor) {
return function() {
var obj = Object.create(constructor.prototype);
constructor.apply(obj, arguments);
return obj;
};
}
function BaseClass(name) {
this.name = name;
}
BaseClass.prototype.sayHello = function() {
console.log("Hello, " + this.name);
}
function DerivedClass(name, age) {
BaseClass.call(this, name);
this.age = age;
}
DerivedClass.prototype = Object.create(BaseClass.prototype);
var NewBaseClass = ClassFactory(BaseClass); // заменяем конструктор BaseClass на NewBaseClass
var NewDerivedClass = ClassFactory(DerivedClass); // заменяем конструктор DerivedClass на NewDerivedClass
var obj1 = new NewBaseClass("John");
obj1.sayHello(); // Hello, John
var obj2 = new NewDerivedClass("Alice", 25);
obj2.sayHello(); // Hello, Alice
console.log(obj2.age); // 25

В этом примере ClassFactory принимает конструктор и возвращает функцию-фабрику, которая создает новый объект с помощью Object.create и применяет конструктор к этому объекту. При создании наследуемого класса достаточно вызвать BaseClass.call(this, name) внутри конструктора DerivedClass, чтобы правильно инициализировать родительский класс.

Этот подход позволяет заменять/подменять конструкторы классов при создании и наследовании, обеспечивая гибкость и чистоту кода.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 622 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир