16.03.2009, 22:21
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
Сообщение от Gvozd
|
вы имеете в виду a.constructor?
|
По-ошибке. Да.
Вообще хотелось бы понять другое - про свойство prototype :
отчего это свойство prototype недоступно для объекта, не являющегося конструктором ?
|
|
16.03.2009, 22:28
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от kefi
|
отчего это свойство prototype недоступно для объекта, не являющегося конструктором ?
|
запомните очень важную вещь:
Прототип и свойство prototype это разные вещи и понятия
свойство prototype конструктора указывает какой прототип будет у объектов созданных при помощи этого конструктора
прототип(доступный в мозилле в виде свойства объекта __proto__.в других браузерах прототип вообще напрямую недоступен) определяет откуда надо брать какое-то свойство, если в объекте оно не определено
таким образом свойство prototype используется только объектами-
конструкторами.
у других объектов(не являющихся функциями) изначально нету свойства prototype.конечно его можно назначить, но смысла в этом будет не более, чем в назначении свойства с дюбым другим именем
|
|
16.03.2009, 23:56
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
Сообщение от Gvozd
|
запомните очень важную вещь:
Прототип и свойство 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 .
Последний раз редактировалось kefi, 17.03.2009 в 00:00.
|
|
17.03.2009, 01:04
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от kefi
|
Видимо, все-таки - это пустой объект не типа constr, а типа Object .
|
глянул Ecma
по ходу да.
какие-то еще вопосы?
|
|
17.03.2009, 01:27
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
Сообщение от Gvozd
|
какие-то еще вопросы?
|
Ну, а как же.
Самый простой - хотелось бы понять, как отличать объекты-конструкторы от объектов-НЕконструкторов ?
- И как присваивать и смотреть аттрибуты ( ReadOnly etc ) свойств объектов ?
- И почему в документации гворитсяЮ что свйоства prototype встроенных объектов нельзя переопределять , когда запросто проходит, например Object.prototype=Array; ?
ЗЫ. Я так понимаю, что в предыдущем моем посте все сказано верно ? По поводу иерархии объектов-конструкторов еще сам додумаю. Тогда уж ,если, выскажусь.
Последний раз редактировалось kefi, 17.03.2009 в 01:41.
|
|
17.03.2009, 01:52
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от kefi
|
как отличать объекты-конструкторы от объектов-НЕконструкторов.
|
любая функция может быть исользована как конструктор.
а может и в обычном режиме использована.
в режиме конструктора, this указывает на создаваемый объект
Сообщение от kefi
|
И как присваивать и смотреть аттрибуты ( ReadOnly etc ) свойств объектов ?
|
никак.атрибуты используются на уровне ядра интепретатора.
Сообщение от kefi
|
ЗЫ. Я так понимаю, что в предыдущем моем посте все сказано верно ? По поводу иерархии объектов-конструкторов еще сам додумаю. Тогда уж ,если, выскажусь.
|
вроде да.ошибок не вижу.
но башка сегодня уже не варит.
PS у вас начинаются вопросы на совсем глубокое знание стандарта Ecma.а я его краем глаза проглядывал.
в дальнейший путь я буду уже идти скорее вровень с вами, чем помогать вам.
а учитывая, что JS не является моим основным профилем работы, мне пока не удастся уделить достаточно времени и желания изучению стандарта и помощи вам
что смогу подскажу.но уже не так активно.
короче, читайте стандарт языка, и пытайтесь понять сами.думаю дальше разбиратся на основе сухой документации у вас получится
|
|
18.03.2009, 22:02
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
Отчего так для 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 то же, но оно у этого объекта как-то вообще непонятно - зачем .
|
|
20.03.2009, 12:49
|
-
|
|
Регистрация: 16.07.2008
Сообщений: 207
|
|
"вкурил" что называется тему. Потом решил почитать что про это пишется у Флэнагана. у Zeroglif'a (по той ссылке) получилось лучше, гораздо подробнее и легче для восприятия.
|
|
20.03.2009, 16:06
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
kefi,
а фиг его знает.тут уже мне самому непонятно.
twolf,
возможно.
у каждого свой стиль мышления.
мы тут писали не статью для всех, а в первую очередь конкретному человеку пытались помочь понять
мне допустим хватило статьи Кантора для того чтобы понять.
правда курил я ее дня два, но да это уже мои проблемы, а не статьи
а кто-то Ecma прочтетт и сразу поймет
|
|
20.03.2009, 16:15
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от kefi
|
Отчего так для Opera и IE ?
|
Потому что "дополнительные мульки" (не-стандарт) в каждом движке реализованы по-своему (если вообще реализованы). Это что касается 'caller' и 'arguments'. В отношении собственного свойства 'prototype' у функции (Function.prototype) - это разночтение стандарта со стороны разработчиков.
|
|
|
|