Есть такая идея: создавать компоненты (классы) определенной функцией. Вот так должен выглядеть интерфейс создания класса:
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?