Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Понимание ООП в JavaScript (https://javascript.ru/forum/misc/3070-ponimanie-oop-v-javascript.html)

kefi 16.03.2009 22:21

Цитата:

Сообщение от Gvozd
вы имеете в виду a.constructor?

По-ошибке. Да.
Вообще хотелось бы понять другое - про свойство prototype :
отчего это свойство prototype недоступно для объекта, не являющегося конструктором ?

Gvozd 16.03.2009 22:28

Цитата:

Сообщение от kefi
отчего это свойство prototype недоступно для объекта, не являющегося конструктором ?

запомните очень важную вещь:
Прототип и свойство prototype это разные вещи и понятия

свойство prototype конструктора указывает какой прототип будет у объектов созданных при помощи этого конструктора
прототип(доступный в мозилле в виде свойства объекта __proto__.в других браузерах прототип вообще напрямую недоступен) определяет откуда надо брать какое-то свойство, если в объекте оно не определено

таким образом свойство prototype используется только объектами-
конструкторами.

у других объектов(не являющихся функциями) изначально нету свойства prototype.конечно его можно назначить, но смысла в этом будет не более, чем в назначении свойства с дюбым другим именем

kefi 16.03.2009 23:56

Цитата:

Сообщение от Gvozd (Сообщение 14464)
запомните очень важную вещь:
Прототип и свойство prototype это разные вещи и понятия

Пожалуй, я это давно понял, а причина этой непонятки была в том, что я не мог уложить в голове другую важную вещь, - а именно то, что свойство prototype имеется не у родителя объекта, а у его конструктора , и ,как и остальные свойства встроенных объектов-конструкторов не наследуется (за исключением ниже приведенного случая ).
Т.е. , все встроенные объекты Object,Array,Function etc являются объектами-конструкторами и не являются предками (прототипами) объектов-НЕконструкторов, ( впрочем, видимо, если они не будут специально подставлены в свойство prototype конструкторов объектов-НЕконструкторов :
var Constr=new Function(); Constr.prototype=Object ; var a=new Constr() ;
alert(a.prototype!==undefined) // TRUE )

Интересно также всвязи со сказанным посмотреть иерархию объектов-конструкторов типа Array,Funciton, etc .

Да, по поводу объяснения выше ,
Цитата:

Сообщение от Gvozd
// - значением свойства prototype объекта-конструктора становится вновь созданный объект - А что это за объект ??- непонятно.
до тех пор, пока вы не переопределите свойство prototype объекта-конструктора, это просто пустой объект типа constr (то есть его конуструктором считается функция constr), с пустым набором свойств

Видимо, все-таки - это пустой объект не типа constr, а типа Object .

Gvozd 17.03.2009 01:04

Цитата:

Сообщение от kefi
Видимо, все-таки - это пустой объект не типа constr, а типа Object .

глянул Ecma
по ходу да.

какие-то еще вопосы?

kefi 17.03.2009 01:27

Цитата:

Сообщение от Gvozd
какие-то еще вопросы?

Ну, а как же.
Самый простой - хотелось бы понять, как отличать объекты-конструкторы от объектов-НЕконструкторов ?
- И как присваивать и смотреть аттрибуты ( ReadOnly etc ) свойств объектов ?
- И почему в документации гворитсяЮ что свйоства prototype встроенных объектов нельзя переопределять , когда запросто проходит, например Object.prototype=Array; ?

ЗЫ. Я так понимаю, что в предыдущем моем посте все сказано верно ? По поводу иерархии объектов-конструкторов еще сам додумаю. Тогда уж ,если, выскажусь.

Gvozd 17.03.2009 01:52

Цитата:

Сообщение от kefi
как отличать объекты-конструкторы от объектов-НЕконструкторов.

любая функция может быть исользована как конструктор.
а может и в обычном режиме использована.
в режиме конструктора, this указывает на создаваемый объект

Цитата:

Сообщение от kefi
И как присваивать и смотреть аттрибуты ( ReadOnly etc ) свойств объектов ?

никак.атрибуты используются на уровне ядра интепретатора.

Цитата:

Сообщение от kefi
ЗЫ. Я так понимаю, что в предыдущем моем посте все сказано верно ? По поводу иерархии объектов-конструкторов еще сам додумаю. Тогда уж ,если, выскажусь.

вроде да.ошибок не вижу.
но башка сегодня уже не варит.

PS у вас начинаются вопросы на совсем глубокое знание стандарта Ecma.а я его краем глаза проглядывал.
в дальнейший путь я буду уже идти скорее вровень с вами, чем помогать вам.
а учитывая, что JS не является моим основным профилем работы, мне пока не удастся уделить достаточно времени и желания изучению стандарта и помощи вам
что смогу подскажу.но уже не так активно.
короче, читайте стандарт языка, и пытайтесь понять сами.думаю дальше разбиратся на основе сухой документации у вас получится

kefi 18.03.2009 22:02

Отчего так для Opera и IE ?:
with (Function.prototype) alert([ 
// Следующие три свойства дают FALSE - в MS JS (IE) и Opera :
 hasOwnProperty("prototype"),   // Function.prototype.prototype==null, в потомках объектах-конструкторах Constr это свойство переопределяется на своего спутника <c>
 hasOwnProperty("arguments"),   //
 hasOwnProperty("caller"),      //  
])

Откуда же берутся ( или чьими собственными свойствами ) являются arguments,caller ? Про prototype то же, но оно у этого объекта как-то вообще непонятно - зачем .

twolf 20.03.2009 12:49

"вкурил" что называется тему. Потом решил почитать что про это пишется у Флэнагана. у Zeroglif'a (по той ссылке) получилось лучше, гораздо подробнее и легче для восприятия.

Gvozd 20.03.2009 16:06

kefi,
а фиг его знает.тут уже мне самому непонятно.
twolf,
возможно.
у каждого свой стиль мышления.
мы тут писали не статью для всех, а в первую очередь конкретному человеку пытались помочь понять
мне допустим хватило статьи Кантора для того чтобы понять.
правда курил я ее дня два, но да это уже мои проблемы, а не статьи
а кто-то Ecma прочтетт и сразу поймет

Zeroglif 20.03.2009 16:15

Цитата:

Сообщение от kefi
Отчего так для Opera и IE ?

Потому что "дополнительные мульки" (не-стандарт) в каждом движке реализованы по-своему (если вообще реализованы). Это что касается 'caller' и 'arguments'. В отношении собственного свойства 'prototype' у функции (Function.prototype) - это разночтение стандарта со стороны разработчиков.


Часовой пояс GMT +3, время: 18:14.