Тема: Про ecmaScript
Показать сообщение отдельно
  #22 (permalink)  
Старый 19.12.2011, 14:34
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от Иваннн Посмотреть сообщение
Почему так получается:
function f(){
this.a=1
}
fo=new f();
alert(fo.constructor.prototype===fo.constructor.prototype.constructor.prototype) // true

И в то же время:
alert(fo.b) //undefined (хотя согласно  определению внутреннего метода [[GetProperty]] в ecmaScript5.1  поиск свойвства с именем b заканчивается только тогда, когда свойвство [[prototype]]   становится null , что смотря на первый пример не случится никогда.
свойство [[prototype]] это не свойство prototype


их часто путают, свойство [[prototype]] в javascript имеет вид __proto__
именно это вы и путаете.

а свойство prototype же вообще означает СОВСЕМ ДРУГОЕ(не смотря на похожие названия) типа "тут хранить методы которые будут доступны ДЕТЯМ объекта."

почему эти методы не засунуть в самого родителя, а засовывать в его свойство prototype? спросите вы? ну я думаю что так сделали чтобы не засирать радителя методами детей и.т.п. и в нем создали типа папочку prototype , в которой ДЕТИ этого обьекта и будут искать свои методы)) как то так

______________________
И еще скажу, на заметку. В том что вы щас читаете ВНУТРЕННИЕ МЕТОДЫ (то есть недоступные программисту, пишутся с двойными квадратными скобками по бокам, то есть по задумке свойство [[prototype]] или по русски __proto__ НЕ ДОСТУПНЫ В КОДЕ, это внутренние методы языка это для создателей движков написано. Но создатели движков сжалились над нами и сделали свойство [[prototype]] ДОСТУПНЫМ нам в коде и назвали его __proto__, это НЕ по спецификации, но так больше возможностей , его даже можно вручную изменять и.т.п. ) , да , а название у него сменили потому что квадратные скобки интерпретатор не правильно поймет.

Последний раз редактировалось Livanderiaamarum, 19.12.2011 в 14:47.
Ответить с цитированием