Показать сообщение отдельно
  #1 (permalink)  
Старый 31.08.2012, 21:57
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Почему не работает код? Вопрос о this.constructor.
Есть всем известный самый простой вариант наследования:
X = function() {}
Y = function() {}
X.prototype.method = function() {alert( "ок" )};
Y.prototype = new X;
y = new Y;
y.method();
Здесь мы присваиваем прототипу Y объект, полученный из конструктора X. Всё логично.

По умолчанию, если мы не используем наследование, то в объекте свойство constructor хранит ссылку на свой конструктор (кэп).
Y = function() {};
y = new Y;
alert( y.constructor === Y );


Но, если мы делаем финт ушами и меняем прототип Y через свойство constructor, ничего из X не наследуется:
X = function() {}
Y = function() {}
X.prototype.method = function() { alert( 'ок' ) };
y = new Y;
alert( y.constructor === Y );
y.constructor.prototype = new X;
alert( y.constructor.prototype === Y.prototype );
y.method();


Почему?

UPD
Так, кстати, тоже не работает:
X = function() {}
Y = function() {}
X.prototype.method = function() { alert( 'ok' ) };
y = new Y;
Y.prototype = new X;
y.method();


Оказывается, я не знаю Javascript.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности

Последний раз редактировалось FINoM, 31.08.2012 в 22:04.
Ответить с цитированием