Я ж говорю не исполняется код этот в режиме конструктора.
Обратите внимание на сообщение номер 6 этой темы. Строка 11. Если вызвать этот конструктор как обычную функцию, до того как используем Element как конструктор, тогда все сработает. Но в режиме конструктора весь ваш код из Element игнорируется. Честно говоря Element вообще не конструктор, она не назначает свойств объекту. |
Кажется понял ответ как всегда на следующей странице):
Хотя свойства и методы, добавленные в прототип, немедленно становятся доступны во всех экземплярах объектов, при перезаписи всего прототипа наблюдается другое поведение. Указатель [[ Prototype ]] задается при вызове конструктора, поэтому изменение прототипа на другой объект нарушает связь между конструктором и оригинальным прототипом. П омните, у экземпляра есть указатель только на прототип, но не на конструктор. Рассмотрим следующий пример: function Person ( ) { } var friend = new Person() ; Person . p rototype = { constructor : Person , name : "Nicholas" , age : 2 9 , job : " Software Engineer " , sayName : function(){ alert ( this.name ) ; } } ; friend.sayName();// ошибка После этого попробовал var el = new Element(); el = new Element(); el.getTags("div"); Теперь понял эту тонкость. что кстати подтверждает 6-е сообщение. Спасибо! |
А нет, попробовал - не игнорируется код. Надо думать тогда.
|
Вот оно что :)
|
Просто получается, что перезапись происходит не у __proto__ который взял ссылку у prototype на момент первого создания
а именно у свойства prototype функции Element. |
Я кстати разницу так до конца и не понял между __proto__ и prototype.
Вроде как __proto__ это конкретно свойство уже существующего объекта, а prototype это свойство конструктора которое влияет на __proto__ в будущем созданных объектов? |
Да я мыслю его также. теперь просто стало понятнее как оно инициализируется.
|
Цитата:
Да уместнее говорить не о prototype конструктора, а о prototype функции Element |
|
Цитата:
|
Часовой пояс GMT +3, время: 13:13. |