Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Правильно ли я представляю фундамент ECMAScript ? поправьте меня пожалуйста. (https://javascript.ru/forum/misc/72788-pravilno-li-ya-predstavlyayu-fundament-ecmascript-popravte-menya-pozhalujjsta.html)

Rashid6 26.02.2018 07:16

Правильно ли я представляю фундамент ECMAScript ? поправьте меня пожалуйста.
 
Вот когда запускается EcmaScript, создается:

Глобальный объект, внутри которого есть методы (Date, Object, Function, Number, String, и т.д.). из этих методов создаются уже объекты (Date, Object, Function, Number, String, и т.д.), которые мы используем ? Правильно я понимаю или Глобальный объект не связан с остальными объектами ?

Aetae 26.02.2018 11:56

В начале есть Object. Всё остальное его наследники.)

Rashid6 26.02.2018 15:12

Но создаваемые объекты ведь сохраняются в глобальном объекте а не в Object.

Например:

var x = 1;
this.x


Получается, Object стоит предпоследним в этой иерархии ?

Белый шум 26.02.2018 15:48

Глобальный объект называется window. Иногда он может совпадать с this.
x = 'global x';
alert('window: ' + window.x);
alert('this: ' + this.x);
alert('window.Object: ' + window.Object);
alert('window.Date: ' + (new window.Date()));
console.log(window);

Rashid6 26.02.2018 16:40

тогда почему window ссылается в конечном итоге на Object ?

window
__proto__:Window
__proto__:WindowProperties
__proto__:EventTarget
__proto__:Object

получается глобальный объект не window а Object, но прочитав спецификацию ecmascript будет ясно что Object не глобальный.

Белый шум 26.02.2018 16:47

Это в каком браузере? В хроме и фф window.__proto__.Object - undefined

Alexandroppolus 26.02.2018 17:02

Rashid6,

у тебя полная неразбериха в голове. Объяснять в двух словах тут не имеет смысла. Советую вдумчиво и неторопливо раскурить местный учебник https://learn.javascript.ru/ , особенно часть первую.

Rashid6 26.02.2018 17:42

У меня все как раз таки норм все, непонятно только почему window стал глобальным объектом у Вас, когда в спецификации глобальный объект - это "Глобальный объект":

http://es5.javascript.ru/x15.1.html#x15.1

Свойства null, undefined тогда в каком объекте ?

Rashid6 26.02.2018 17:48


Белый шум 26.02.2018 18:43

Ну да, window - это объект.
Цитата:

Например, в объектной модели HTML-документа свойство window глобального объекта является самим глобальным объектом.

MallSerg 26.02.2018 21:23

Похоже тут нужен КЕП.

1. Свойство глобального объекта Window это ссылка на глобальный объект.
2. Глобальный объект это глобальный объект.
2.1 В JavaScript есть наследование. Любой объектный тип данных наследует свойства у Object.
2.2 Так как глобальный объект это объект то у него могут быть свойства. (null, undefined).

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

Rashid6 похоже думает что "Object" ,"window" и "Глобальный объект" это разные типы данных (классы как в C#)

На самом деле window это идентификатор хранящий ссылку на "Глобальный объект" который является экземпляром "Object".

Rashid6 28.02.2018 11:04

Цитата:

Сообщение от MallSerg (Сообщение 479274)
Похоже тут нужен КЕП.

1. Свойство глобального объекта Window это ссылка на глобальный объект.
2. Глобальный объект это глобальный объект.
2.1 В JavaScript есть наследование. Любой объектный тип данных наследует свойства у Object.
2.2 Так как глобальный объект это объект то у него могут быть свойства. (null, undefined).

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

Rashid6 похоже думает что "Object" ,"window" и "Глобальный объект" это разные типы данных (классы как в C#)

На самом деле window это идентификатор хранящий ссылку на "Глобальный объект" который является экземпляром "Object".


Во спасибо, да я думал как классы. Теперь понятно что window это Глобальный объект, и у него не должно быть конструктора, ссылается на объект - потому что сам window это объект. Все логично, всем спасибо!

Rashid6 28.02.2018 11:10

Цитата:

Сообщение от Rise (Сообщение 479278)
Rashid6,
Еще хотел сказать, что все эти window, document, ajax и тд, это не часть ECMAScript, это отдельные стандарты https://www.w3.org/standards/webdesign/script.

Ах да, это я понял. Только вот:

В глобальном объекте window столько объектов, это получается все нужно знать веб программисту, ну фронтендеру, или как там ? Это реально вообще ?

Rashid6 01.03.2018 08:44

Цитата:

Сообщение от Rise (Сообщение 479449)
Rashid6,
По необходимости конечно, всё знать не реально, но основы хотя бы знать надо, дальше пойдут фреймворки, в общем учиться придется постоянно :)

Ну основы я вроде как учу это EcmaScript и DOM в основном далее BOM.
А вот фремверки это что, не понимаю для чего они нужны, почему в самом Js писать нельзя а именно делать проекты на фремверках ?

Я вот понимаю чем занимаются верстальщики допустим, а чем занимаются те люди которые знают фреймверки, то есть настоящие фронтенд разработчики ?
Цитата:

Как говорил товарищ Ленин - "Учится, учится, и ещё раз учится."

Dilettante_Pro 01.03.2018 11:43

Rashid6,
Цитата:

Сообщение от Rashid6
Учится, учится, и ещё раз учится

В порядке учебы:
Учиться, учиться, и ещё раз учиться

Русский - это тоже язык, ничем не хуже языков программирования. Несоблюдение орфографии изменяет смысл.
Цитата:

Сообщение от Rashid6
А вот фремверки это что, не понимаю для чего они нужны, почему в самом Js писать нельзя

Можно, но зачем заново самому писать то, что уже написано - и хорошо написано? Фреймворки - это библиотеки очень полезных вещей


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