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
180 +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 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир