/**
*
* OBJECT PATTERN
*
*/
var Modul = Modul || {};
Modul.BasicClass = function (_arg) {
this._key = _arg;
};
Modul.BasicClass.prototype = {
Create: function (_name) {
var _key = this._key;
this.ChildClass = function () {
this.superclass.call(this, _key);
this._val = _name;
};
this.ChildClass.prototype = new Modul.BasicClass();
this.ChildClass.prototype.superclass = Modul.BasicClass;
this.ChildClass.prototype.constructor = this.ChildClass;
delete this.ChildClass.prototype.Create;
return new this.ChildClass();
}
//Test method
, returnArg: function () {
return this._key + ': ' + this._val;
}
//Other inheritable method
, Method1: function () {}
, Method2: function () {}
, Method3: function () {}
, toString: function () {}
, valueOf: function () {}
};
var baseUserClass = new Modul.BasicClass('Name'),
subUserClsas1 = baseUserClass.Create('Boodoolai'),
subUserClsas2 = baseUserClass.Create('Kolobok');
/**
* TEST PATTERN
*
* @return true
* @return true
*/
console.log(subUserClsas1 instanceof Modul.BasicClass);
console.log(subUserClsas2 instanceof Modul.BasicClass);
/**
* @return Name: Boodoolai
* @return Name: Kolobok
*/
console.log(subUserClsas1.returnArg());
console.log(subUserClsas2.returnArg());
Этот патерн мало чем отличает от других, просто есть сомнения, что в назначении наследуемости есть, что то лишнее. А именно, не хотелось бы терять память на имеющейся цикличности.
Сразу замечу, что под имеющуюся задачу, клонирование объектов с прототипами (наподобие .extend) - не вариант.