Чо-то мне кажется это слишком медленно, так что завязываю и снова возвращаюсь к UI.js
function Class( description ) {
return Class.extend( description );
}
Class.extend = function( description ) {
description = parse( description );
description.prototype = this.prototype;
var prototype = new description;
if (prototype.hasOwnProperty( 'constructor' )) {
var constructor = prototype.constructor
}
else {
var constructor = function() {}
}
constructor.prototype = prototype;
constructor.prototype.parent = description.prototype;
constructor.extend = this.extend;
return constructor;
};
function parse( description ) {
var code = description.toString().match( /\{([\s\S]*)\}/ )[1];
var regExp = /parent[\s]*\.[\s]*(\w+)[\s]*\((.*?)\)/img;
code = code.replace( regExp, function( match, method, params ) {
var callText = /\S/.test( params ) ? '.call(this,' : '.call(this';
return 'parent.' + method + callText + params + ')';
} );
code = 'with(this){' + code + '}';
return new Function( code );
}
// ИСПОЛЬЗУЕМ
Animal = Class.extend( function() {
this.say = function() {
alert( 'animal' )
}
} );
Cat = Animal.extend( function() {
this.say = function() {
parent.say();
alert( 'cat' );
}
} )
new Cat().say();