Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.01.2014, 12:27
Аватар для rekzi
Аспирант
Отправить личное сообщение для rekzi Посмотреть профиль Найти все сообщения от rekzi
 
Регистрация: 28.08.2013
Сообщений: 78

Бесконечной рекурсия
function foo() {}
foo.prototype.identify = function() {
	return "I'm a foo";
}

function bar() {}
extend(bar, foo)
bar.prototype.identify = function() {
	return "I'm a bar and " +
	this.constructor.superclass.identify.apply(this, arguments);
}

function zot() {}
extend(zot, bar)
zot.prototype.identify = function() {
	return "I'm a zot and " +
	this.constructor.superclass.identify.apply(this, arguments);
}

f = new foo();

alert(f.identify()); // "I'm a foo"

b = new bar();

alert(b.identify()); // "I'm a bar and I'm a foo"

z = new zot();

alert(z.identify()); // stack overflow
Не могу понять пример, почему обращение происходит к дочернему классу zot из bar? Из-за передаваемого контекста this в apply?
Ответить с цитированием
  #2 (permalink)  
Старый 03.01.2014, 12:44
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

В общих чертах: так в js не делают. Для экземпляра zot, this.constructor.superclass === bar.prototype. И, соотвественно, this.constructor.superclass.identify в bar.prototype.identify ссылается сам на себя. Делают так:
function foo() {}
foo.prototype.identify = function() {
    return "I'm a foo";
}
 
function bar() {}
extend(bar, foo)
bar.prototype.identify = function() {
    return "I'm a bar and " +
    foo.prototype.identify.apply(this, arguments);
}
 
function zot() {}
extend(zot, bar)
zot.prototype.identify = function() {
    return "I'm a zot and " +
    bar.prototype.identify.apply(this, arguments);
}
Ответить с цитированием
  #3 (permalink)  
Старый 03.01.2014, 13:26
Аватар для rekzi
Аспирант
Отправить личное сообщение для rekzi Посмотреть профиль Найти все сообщения от rekzi
 
Регистрация: 28.08.2013
Сообщений: 78

Разобрался. This в bar будет являться экземпляром zot.

Последний раз редактировалось rekzi, 03.01.2014 в 13:50.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с jQuery плагином бесконечной прокрутки страницы Arhey jQuery 0 13.04.2013 01:13
too much recursion рекурсия ajax запросов timach jQuery 0 17.01.2013 12:05
рекурсия в обратную сторону bugmenot Общие вопросы Javascript 1 29.11.2011 23:45
RegExp очень нужна рекурсия и ссылочность scuter Общие вопросы Javascript 9 18.08.2011 19:27
jQuery, функция animate(), рекурсия xintrea jQuery 12 03.01.2011 12:33