Показать сообщение отдельно
  #6 (permalink)  
Старый 03.08.2010, 13:55
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

У меня так:

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 нубы писали.
Ответить с цитированием