Сообщение от Иваннн
|
Почему так получается:
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__, это НЕ по спецификации, но так больше возможностей , его даже можно вручную изменять и.т.п. ) , да , а название у него сменили потому что квадратные скобки интерпретатор не правильно поймет.