Смотри, как надо такое отлаживать. Переходим на страницу просмотра кода без редактора http://j...content-available-to-author-only...n.com/gazucolegusu/1 и открываем отладчик (Ctrl + Shift + I). В нем ставим режим «остановка при исключении» (в Хроме это круглая кпопка с паузой внизу, в фаерфоксе — пункт меню на вкладке Debugger). Перезагружаем страницу чтобы запустить скрипт.
Вывалившись в отладчик, изучаем ситуацию (точнее что хранится в Element). По моим ощущениям, в Хроме отладчик проще и лучше работает, в фаерфоксовом я путаюсь.
Там мы увидим, что у element есть Powerhouse в прототипе а, далее — Object. То есть Powerhouse ни от чего не унаследован.
> у Powerhouse.prototype.__proto__ == ElementsNetwork
надо проверять element.__proto__.__proto__ в момент останова. __proto__ — нестандартное свойство, не работает в Хроме, стандартный етод это Object.getPrototypeOf()
У тебя эта строчка зачем-то в конструкторе. То есть при первом вызове
var x =new Powerhouse();
Пока эта строчка не выпонилась, Powerhouse.prototype ={...}(обычный объект с прототипом Object, значение по умолчанию), и цепочка прототипов для x имеет вид
x ->Powerhouse->Object
У Powerhouse в этот момент в prototype ничего нет и потому получается такой объект.
Не настраивай прототипы в конструкторе, это делается в глобальном коде 1 раз до начала основной программы.
Ну и у меня ощущение, что ты не понимаешь, как работают прототипы. Работают они очень просто: в момент вызова new прототипом нового объекта становится то, что было в этот момент в свойстве prototype функции-конструктора.
Смотри, как надо такое отлаживать. Переходим на страницу просмотра кода без редактора http://j...content-available-to-author-only...n.com/gazucolegusu/1 и открываем отладчик (Ctrl + Shift + I). В нем ставим режим «остановка при исключении» (в Хроме это круглая кпопка с паузой внизу, в фаерфоксе — пункт меню на вкладке Debugger). Перезагружаем страницу чтобы запустить скрипт.
Вывалившись в отладчик, изучаем ситуацию (точнее что хранится в Element). По моим ощущениям, в Хроме отладчик проще и лучше работает, в фаерфоксовом я путаюсь.
Там мы увидим, что у element есть Powerhouse в прототипе а, далее — Object. То есть Powerhouse ни от чего не унаследован.
> у Powerhouse.prototype.__proto__ == ElementsNetwork
надо проверять element.__proto__.__proto__ в момент останова. __proto__ — нестандартное свойство, не работает в Хроме, стандартный етод это Object.getPrototypeOf()
Ну и понятно почему:
> Powerhouse.prototype = Object.create(ElementsNetwork.prototype);
У тебя эта строчка зачем-то в конструкторе. То есть при первом вызове
var x = new Powerhouse();
Пока эта строчка не выпонилась, Powerhouse.prototype = {...} (обычный объект с прототипом Object, значение по умолчанию), и цепочка прототипов для x имеет вид
x -> Powerhouse -> Object
У Powerhouse в этот момент в prototype ничего нет и потому получается такой объект.
Не настраивай прототипы в конструкторе, это делается в глобальном коде 1 раз до начала основной программы.
Ну и у меня ощущение, что ты не понимаешь, как работают прототипы. Работают они очень просто: в момент вызова new прототипом нового объекта становится то, что было в этот момент в свойстве prototype функции-конструктора.