спасибо, баг нашел, короч влом фиксить, все ровно это ни кто юзать не будет. но мой способ поддерживает множественное наследование)
function Class(){
}
Class.extend = function (Prototype) {
Prototype.prototype = this.prototype;
constructor.prototype = new Prototype();
constructor.extend = this.extend;
function constructor() {
if (this.constructor) {
this.constructor.apply(this, arguments);
}
for (var key in this) if (this.hasOwnProperty(key) && /(^_)|(_$)/.test(key)) {
Object.defineProperty(this, key, {
value : this[key],
writable : true,
configurable: true,
enumerable : false
});
}
}
for (var key in constructor.prototype) if (constructor.prototype.hasOwnProperty(key)) {
if (/(^_)|(_$)|(constructor)/.test(key)) {
Object.defineProperty(constructor.prototype, key, {
value : constructor.prototype[key],
writable : true,
configurable: true,
enumerable : false
});
}
if (key in this.prototype && typeof this.prototype[key] === 'function') {
Object.defineProperty(constructor.prototype, '$' + key, {
value : this.prototype[key],
writable : false,
configurable: false,
enumerable : false
});
}
}
return constructor;
};
//#################################
var Animal = Class.extend(function () {
this.say = function () {
alert('Animal')
}
});
var Cat = Animal.extend(function () {
this.say = function () {
this.$say();
alert('Cat')
}
});
var Ashot = Cat.extend(function () {
this.say = function () {
this.$say();
alert('Ashot')
}
});
new Ashot().say();