У меня так:
Object.extend = function(self, obj, skip) {
if (self == null) self = {};
if (skip) for (var key in obj) key in self || (self[key] = obj[key]);
else for (var key in obj) self[key] = obj[key];
return self;
};
var Class = {
create: function(parent, declaration) {
var klass = function() {
this.initialize.apply(this, arguments);
};
if (typeof parent == 'function') {
var falseConstr = function() {};
falseConstr.prototype = parent.prototype;
klass.prototype = new falseConstr();
} else if (parent) {
declaration = parent;
parent = null;
}
Object.extend(klass.prototype, declaration).initialize
|| (klass.prototype.initialize = Function.blank);
klass.prototype.$super = (klass.$super = parent || Object).prototype;
return klass.prototype.constructor = klass;
}
};
Только я не уверен, что все правильно, особенно вот в этой строчке:
klass.prototype.$super = (klass.$super = parent || Object).prototype;
В ajaxoop (
http://ajaxoop.org/) эта строка написана так:
_class.prototype.$super = parent ? parent.prototype : Function.blank.prototype;
_class.prototype.$_super = parent ? parent : Function.blank;
т. е. если не указан родитель, то им становится Function. Не понимаю зачем они так сделали, я родителем Object делаю, у Kolyaj тоже так, в общем либо я нуб, т. к. все еще чего-то не понимаю, либо ajaxoop нубы писали.