Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.07.2010, 08:40
dp_ dp_ вне форума
Интересующийся
Отправить личное сообщение для dp_ Посмотреть профиль Найти все сообщения от dp_
 
Регистрация: 23.02.2010
Сообщений: 10

Наследование
<html>
<head>
<title>Inheritance demo</title>
</head>
<body>
<script type="text/javascript">


	var Class = function(parent,methods){
		if (arguments.length == 1) { 
			methods = parent; 
			parent = null; 
		}
		var child = function() { 
			this.initialize.apply(this, arguments);
		};
		if (typeof(parent) == 'function') {
			child.prototype = new parent;
			child.superclass = parent;
		}
		if (typeof(methods) != 'undefined' && methods !== null) {
			for (var prop in methods) {
				if (!child.prototype[prop] && typeof(methods[prop]) == 'function') {
					child.prototype[prop] = methods[prop];
				}
			}
		}
		if (!child.prototype.initialize) child.prototype.initialize = function(){};
		child.prototype.constructor = child;
		return child;
	}

	var baseClass = Class({
		initialize:function(text){
			this.text = text;
		},
		display: function(){
			alert(this.text);
		}
	});

	var childClass = Class(baseClass,{
		initialize:function(){
			this.superclass("base class text");
		},
		display2: function(){
			alert('child class text');
		}
	});

	var obj = childClass();
	obj.display();
	obj.display2();


</script>
</body>
</html>

Может кто нибудь мне объяснить почему этот код не работает?

Последний раз редактировалось dp_, 08.07.2010 в 08:50.
Ответить с цитированием
  #2 (permalink)  
Старый 08.07.2010, 10:25
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

догадываюсь, потому что в нём ошибка?
Ответить с цитированием
  #3 (permalink)  
Старый 08.07.2010, 10:51
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Ага, и ещё она между 1-ой и 58-ой строкой кода.
Ответить с цитированием
  #4 (permalink)  
Старый 08.07.2010, 12:05
dp_ dp_ вне форума
Интересующийся
Отправить личное сообщение для dp_ Посмотреть профиль Найти все сообщения от dp_
 
Регистрация: 23.02.2010
Сообщений: 10

Круто, но мне не такой ответ нужен
Зачем оставлять бессмысленные посты
Ответить с цитированием
  #5 (permalink)  
Старый 08.07.2010, 12:58
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Работает.
Ответить с цитированием
  #6 (permalink)  
Старый 08.07.2010, 13:25
dp_ dp_ вне форума
Интересующийся
Отправить личное сообщение для dp_ Посмотреть профиль Найти все сообщения от dp_
 
Регистрация: 23.02.2010
Сообщений: 10

Сообщение от Kolyaj Посмотреть сообщение
Работает.
TypeError: Result of expression 'this.initialize' [undefined] is not an object.
Ответить с цитированием
  #7 (permalink)  
Старый 08.07.2010, 13:41
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от dp_
TypeError: Result of expression 'this.initialize' [undefined] is not an object.
Что мешало сразу написать, что именно не работает?

Сообщение от dp_
this.superclass("base class text");
Так нельзя. Должно быть что-то вроде
this.superclass.prototype.initialize.call(this, "base class text");


Ну и смена сигнатуры метода в дочернем классе дурной тон.
Ответить с цитированием
  #8 (permalink)  
Старый 08.07.2010, 15:18
dp_ dp_ вне форума
Интересующийся
Отправить личное сообщение для dp_ Посмотреть профиль Найти все сообщения от dp_
 
Регистрация: 23.02.2010
Сообщений: 10

Сообщение от Kolyaj Посмотреть сообщение
Что мешало сразу написать, что именно не работает?


Так нельзя. Должно быть что-то вроде
this.superclass.prototype.initialize.call(this, "base class text");


Ну и смена сигнатуры метода в дочернем классе дурной тон.
Проблема в том что до вызова метода superclass дело и не доходит ошибка возникает раньше проблема где то в функции Class что-то не так с механизмом наследования И где вы увидели смену сигнатуры? Конструктор базового класса вызывается с теми параметрами с какими и объявлен !
Ответить с цитированием
  #9 (permalink)  
Старый 08.07.2010, 15:21
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от dp_
Проблема в том что до вызова метода superclass дело и не доходит
Ну да, не обратил внимания. http://javascript.ru/tutorial/object...unkciya-extend


Сообщение от dp_
И где вы увидели смену сигнатуры?
childClass.initialize не передаёт свои аргументы в baseClass.initialize
Ответить с цитированием
  #10 (permalink)  
Старый 08.07.2010, 15:23
dp_ dp_ вне форума
Интересующийся
Отправить личное сообщение для dp_ Посмотреть профиль Найти все сообщения от dp_
 
Регистрация: 23.02.2010
Сообщений: 10

Сообщение от Kolyaj Посмотреть сообщение
Что мешало сразу написать, что именно не работает?
Мешает то что если указать не ошибку которую вижу я то можно забыть о свежем взгляде на проблему со сторону тех кому этот вопрос адресован
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Множественное наследование - миф или реальность?! B~Vladi Оффтопик 109 04.09.2012 16:13
Наследование класса-замыкания и вызов метода предка BobiKK Общие вопросы Javascript 2 21.03.2010 13:26
Наследование Fliand Events/DOM/Window 0 12.08.2009 20:48
Наследование в CSS SunnyDay (X)HTML/CSS 14 06.10.2008 20:06
наследование установок динамически создаваемыми элементами majestic jQuery 1 15.09.2008 13:21