Я ж говорю не исполняется код этот в режиме конструктора.
Обратите внимание на сообщение номер 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, время: 11:38. |