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

kefi 20.03.2009 20:56

Цитата:

Сообщение от Zeroglif
Потому что "дополнительные мульки" (не-стандарт)

Да ,уже догадался. Но вот что хотелось бы понять -
что же является стандартом javascript ?.
- ECMA - вроде как первая версия, а теперь на какую нужно опираться и где ее взять ?
- совместимы ли спецификации снизу вверх ?

Zeroglif 20.03.2009 21:12

Цитата:

Сообщение от kefi
где ее взять

http://www.ecma-international.org/pu...s/Ecma-262.htm
Или на этом сайте есть переведённый вариант этого же документа (если нравится читать по-русски).
Цитата:

Сообщение от kefi
совместимы ли спецификации снизу вверх ?

Стараются.

kefi 20.03.2009 22:54

Насчет версий не понял, но
Вот еще вопросик :
известно, что Function.prototype.constructor указывает на Function,
Но кто считается действительным конструктором объекта-экземпляра Function ?
То, что Function создал самого себя сам как-то не укладывается в голове.

Zeroglif 21.03.2009 16:51

Цитата:

Сообщение от kefi
Известно, что Function.prototype.constructor указывает на Function. Но кто считается действительным конструктором объекта-экземпляра Function ? То, что Function создал самого себя сам как-то не укладывается в голове.

'Function' - это встроенный объект, тот, который "available whenever an ECMAScript program begins execution", его "действительный конструктор" остался в тени, за рамками стандарта.

'Function.prototype' - это другой встроенный объект с аналогично неизвестной историей конструирования. Для нас важны не встроенные (с ними и так всё понятно), а новые функции, появляющиеся в программе через 'new Function', для них и предусмотрено наследуемое свойство 'constructor', которое является родным свойством функции 'Function.prototype', но работает прежде всего для связи вновь созданных функций со своим "действительным конструктором", с 'Function'...

Dmitry A. Soshnikov 21.03.2009 20:10

Цитата:

Сообщение от kefi
То, что Function создал самого себя сам как-то не укладывается в голове.

Движок его создал и записал в поле constructor ссылку на созданный объект.

kefi 28.03.2009 18:32

Вот еще обнаружился непонятный интересный факт :
Если имеем
function X(){this.fld=123;} ; X.prototype.fld=1234;
x = new X() ;
То: x.fld!=X.prototype.fld , x==123
Т.е. как же так получается для x : поле fld берется не из прототипа x , а из нутренностей его конструктора ? Где же логика делегирования свойств прототипа его потомку ?

PS. С методами та же петрушка.

Gvozd 28.03.2009 18:50

kefi,
ну, вообще-то так и должно быть.
при запросе свойства у объекта, оно сперва ищется у него самого.
затем у его прототипа.потом выше.
в данном случае вы в конструкторе определили объекту собственное свойство, и поэтому оно берется из самого объекта, а не прототипа

kefi 28.03.2009 18:57

2 Gvozd >
Да, действительно , уже понял. Несколько увлекся ...

kefi 28.03.2009 19:14

Правда, вот чего не понял :
В каких случаях имеет смысл держать одинаковые имена свойств в прототипе и в Конструкторе ?

Gvozd 28.03.2009 19:40

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


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