Почему не работает код? Вопрос о 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. |
FINoM,
потому что объект y уже создан и не расширяется прототипом Y зато следующие объекты Y будут иметь метод method X = function() {} Y = function() {} X.prototype.method = function() { alert( 'ок' ) }; y = new Y; alert( y.constructor === Y ) y.constructor.prototype = new X; yy = new Y; yy.method(); |
Цитата:
C.prototype.method > не найден C.prototype.constructor.prototype.method > не найден C.prototype.constructor.prototype.constructor.prot otype.method ... и так дальше, пока ...prototype.constructor !== ...prototype.constructor.prototype.constructor |
Что характерно:
X = function() {} Y = function() {} X.prototype.method = function() { alert( 'ok' ) }; y = new Y; y.constructor.prototype = new X; alert( y instanceof Y ); alert( y instanceof X ); |
Цитата:
X = function() {} Y = function() {} X.prototype.method = function () { alert( 'ok' ) }; y = new Y; Y.prototype = new X; alert( y.method );//undefined alert( y.constructor.prototype.method );//function () { alert( 'ok' ) } становиться очевидно что при создании объекта что то летает по внутренностям добавляя свойства и методы только один раз что бы потом не искать прототипе P.S. спасибо за тему - кое что из неё я усвоил :thanks: |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
var X = function() {} var Y = function() {} X.prototype.method = function() { alert( 'ok' ) }; var y = new Y; Y.prototype.method = X.prototype.method; y.method(); |
Цитата:
Цитата:
Цитата:
http://learn.javascript.ru/prototype#свойство-prototype думаю, тему можно закрывать. |
Часовой пояс GMT +3, время: 21:35. |