Как правильно создать функцию, создающую классы?

Есть такая идея: создавать компоненты (классы) определенной функцией. Вот так должен выглядеть интерфейс создания класса:
Component.create('ComponentName', {
init: function () {}
..... и прочие методы
});


Для этого я создал функцию:
Component.create = function (name, methods) {

var NewClass = function (/*arguments*/) {
// тут записываем в свойства класса переданные при создании экземпляра аргументы и инициализируем:
this.init();
};

// В прототип новой функции записываем 
// свойства объекта Component, переданные методы и имя класса
// (просто свойство для наглядности):
NewClass.prototype = Object.create($.extend(this, methods, {
            componentName: name
        }));

// А затем сохраняем ссылку на функцию в некоем объекте obj = {}, который находится снаружи:
obj[name] = NewClass;

return NewClass;
};


После этого если создать пару классов и заглянуть в объект obj, то там будут две функции с одним и тем же прототипом. Это и понятно: я записываю в прототип NewClass одни данные, потом, при создании другого класса, перезаписываю прототип... Функции NewClass разные, а объект- прототип у них один и свойства получились общие.
Это совсем не то, чего я ожидал.

Как сделать, чтобы NewClass каждый раз был новой функцией со своим прототипом, который не перезапишется при повторном вызове Component.create?
  • Вопрос задан
  • 324 просмотра
Решения вопроса 2
try this
NewClass.prototype = Object.create($.extend({}, this, methods, {
    componentName: name
}));
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Зачем это делать в 2016 году? Классическую реализацию можно посмотреть тут: https://github.com/jashkenas/backbone/blob/master/..., ну а ноги растут отсюда: www.crockford.com/javascript/inheritance.html
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы