Показать сообщение отдельно
  #8 (permalink)  
Старый 08.05.2011, 11:59
Аватар для Lerayne
Интересующийся
Отправить личное сообщение для Lerayne Посмотреть профиль Найти все сообщения от Lerayne
 
Регистрация: 05.05.2011
Сообщений: 10

Спасибо. Особенно понравилось решение по перезаписи метода, которое я давно искал.

Насчет вашей реализации конструктора - я к сожалению еще не на том уровне, чтобы полностью понимать его, но вопрос - полностью ли корректна такая его реализация:

var Class = function(parent, declaration) {
	
	var $extend = Object.extend = function(self, obj) {
		if (self == null) self = {};
		for (var key in obj) self[key] = obj[key];
		return self;
	}
	
	var Klass = function() {
		this.initialize.apply(this, arguments);
	}
	
	if (typeof parent == 'function') {
		function F(){}
		F.prototype = parent.prototype;
		Klass.prototype = new F();
	} else {
		if (parent != null) declaration = parent;
		parent = Object;
	}
	
	$extend(Klass.prototype, declaration).initialize || (Klass.prototype.initialize = Function.blank);
	Klass.$super = parent;
	Klass.prototype.$super = parent.prototype;
	return Klass.prototype.constructor = Klass;

}

var Pa = Class({
	initialize: function(color) {
		this.populate(color);
	},

	populate: function(color) {
		this.container = div('container', 'empty');
		this.container.style.background = color;
	}
});

var Ci = Class(Pa, {
	populate: function(color) {
		P.prototype.populate.call(this, color);
		this.header = div('header', 'Заголовок!');
		this.container.appendChild(this.header);
	}
});


В примере, который мы рассматриваем моя реализация работает корректно, ошибок нее выдает, но не видите ли вы каких-то скрытых подводных граблей?

И еще несколько вопросов:

1) имеет ли какое-то значение использование $ в названиях функций и свойств? Судя по тому что знаю я - значение у доллара чисто символическое, оно для программиста, а не для интерпретатора.

2) для чего нужно $extend = Object.extend = function, что дает наличие Object.extend?

3) Немного смутило свойство Klass.$super. Если это замена .superclass, то как она работает?
Ответить с цитированием