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

Сообщение от Lerayne
я решил проблему путем вызова Child.superclass.constructor.apply(this, arguments) внутри дочернего класса
неверный подход, дочерний класс (да и кто угодно другой) может создавать экземпляр родительского, только если это нужно по смыслу, но не ради того что бы выдернуть из него какие-то значения. В конце концов, в конструкторе родительского класса может помимо вычислений нужных значений происходить что-то, что пока совсем не нужно (например, ajax-запрос).

Сообщение от Lerayne
что если в родительском классе есть не только объявление свойств и методов, но и некие действия со свойствами
тогда создаем метод выполняющий "некие действия со свойствами" и используемый в обоих конструкторах (дочерний класс унаследует его):

function extend(Parent, Child) {
    var F = function() { }
    F.prototype = Parent.prototype
    Child.prototype = new F()
    Child.prototype.constructor = Child
    Child.superclass = Parent.prototype
}

var Parent = function() {
	// Используем в родительском конструкторе
	alert(this.method());
};
Parent.prototype.method = function() {
	return 'Вычисляются какие-то значения';
};

var Child = function() {
	// Используем в дочернем конструкторе
	alert(this.method());
};
extend(Parent, Child);

new Child();
Ответить с цитированием