Как повторно использовать одну и ту же конструкторскую функцию в нескольких объектах?duplicate constructor function
Здесь creditor_group
построен в обоих объектах .. Как дублировать функцию Delegate
!?
http://jsfiddle.net/q2nxuhyc/2/
код
var App = {};
App.module_group = function(main, location, table){
this.init = function(){
console.log('init: '+table+' args: '+main+', '+location);
};
this.test = function(){
console.log('test: '+table);
};
};
function Delegate(main, location){
this.table;
this.module_name;
var module;
this.init = function(){
module = new App[this.module_name](main, location, this.table);
module.init();
return module;
};
this.test = function(){
module.test();
};
}
var module_1 = Delegate;
module_1.prototype.table = 'debtor_group';
module_1.prototype.module_name = 'module_group';
var module_2 = Delegate;
module_2.prototype.table = 'creditor_group';
module_2.prototype.module_name = 'module_group';
// This part where the objects are constructed is done in another scope
var m_1 = new module_1('main', 'location');
m_1.init();
m_1.test();
var m_2 = new module_2('main', 'location');
m_2.init();
m_2.test();
консоль
init: creditor_group args: main, location
test: creditor_group
init: creditor_group args: main, location
test: creditor_group
Консольный выход происходит потому, что «module_1.prototype» и «module_2.prototype» относятся к одному и тому же объекту, поэтому вы перезаписываете свойство таблицы. – CrowbarKZ
Я знаю .. Но как его решить ?! – clarkk
Мне немного непонятно, что вы хотите там сделать. Если вы хотите создать разные объекты с одним и тем же конструктором, вы можете передать все значения (например, table, module_name) в качестве параметров. Или вы можете создавать новые конструкторы, которые наследуют от Delegate и изменят их прототипы. – CrowbarKZ