В чем разница между собственными объектами и объектами хоста?
Я не понимаю разницы между собственными объектами и объектами хоста в JavaScript. Относится 9X_javascript-dom ли последнее просто к объектам непримитивных 9X_vanillajs функций, которые были созданы пользовательским 9X_.js конструктором (например, var bird1 = new Bird();
)?
- @ ŠimeVidas: В вашем комментарии говорится, что * объекты хоста не определены в спецификации ECMAScript *. Ваш ответ гласит: * «Определения для обоих находятся в специфика ...
Ответ #1
Ответ на вопрос: В чем разница между собственными объектами и объектами хоста?
Оба термина определены в спецификации ECMAScript:
собственный объект
объект 9X_javascript-dom в реализации ECMAScript, семантика которого 9X_.js полностью определяется этой спецификацией, а 9X_javascript-objects не средой хоста.
ПРИМЕЧАНИЕ Стандартные собственные 9X_vanilla-js объекты определены в этой спецификации. Некоторые встроены 9X_.js нативные объекты; другие могут быть построены 9X_vanilla-js во время ход выполнения программы ECMAScript.
Источник: http://es5.github.com/#x4.3.6
хост-объект
объект, предоставленный 9X_.js средой хоста для завершения среда исполнения 9X_vanillajs ECMAScript.
ПРИМЕЧАНИЕ. Любой объект, который 9X_.js не является родным, является объектом хоста.
Источник: http://es5.github.com/#x4.3.8
Несколько 9X_javascript примеров:
Собственные объекты: Object
(конструктор), Date
, Math
, parseInt
, eval
, строка 9X_javascript-execution такие методы, как indexOf
и replace
, методы массива, ...
Хост-объекты 9X_vanilla-js (при условии, что среда браузера): window
, document
, location
, history
, XMLHttpRequest
, setTimeout
, getElementsByTagName
, querySelectorAll
, ...
- @ ŠimeVidas: * "Значит, это хост-объект." * Это неверно. См. Определение объекта хоста, описанное [в этом ответе] (http://stackoverflow.com/questions/761 ...
Ответ #2
Ответ на вопрос: В чем разница между собственными объектами и объектами хоста?
Это станет более ясным, если мы будем различать 9X_vanilla-javascript три типа объектов:
Встроенные объекты: String
, Math
, RegExp
, Object
, Function
и т. д. - основные 9X_.js предопределенные объекты всегда доступны 9X_vanillajs в JavaScript. Определено в спецификации 9X_javascript ECMAScript.
Объекты хоста: такие объекты, как window
, XmlHttpRequest
, узлы 9X_javascript DOM и т. д., которые предоставляются средой 9X_vanilla-js браузера. Они отличаются от встроенных объектов, потому 9X_javascriptobject что не во всех средах будут одинаковые хост-объекты. Если 9X_javascript-objects JavaScript работает вне браузера, например, как 9X_js язык сценариев на стороне сервера, как в 9X_vanilla-js Node.js, будут доступны различные объекты 9X_javascript хоста.
Пользовательские объекты: объекты, определенные в коде JavaScript. Итак, Bird 9X_javascript-dom в вашем примере будет объектом пользователя.
В 9X_vanilla-javascript спецификации JavaScript встроенные объекты 9X_javascript и пользовательские объекты группируются 9X_javascript-objects вместе как собственные объекты. Это неортодоксальное использование 9X_.js термина «собственный», поскольку пользовательские 9X_javascript-objects объекты, очевидно, реализованы в JavaScript, в 9X_js то время как встроенные, скорее всего, реализованы 9X_js на другом языке под капотом, так же, как 9X_javascriptobject и хост-объекты. Но с точки зрения спецификации 9X_.js JavaScript как встроенные, так и пользовательские 9X_vanillajs объекты являются нативными для JavaScript, поскольку 9X_javascript-execution они определены в спецификации JavaScript, а 9X_vanilla-js объекты хоста - нет.
Ответ #3
Ответ на вопрос: В чем разница между собственными объектами и объектами хоста?
Вот мое понимание спецификации.
Это:
var bird = new Bird();
... приводит 9X_ecmascript к созданию собственного объекта, который 9X_vanilla-javascript просто случайно был создан с помощью оператора 9X_javascript-dom new
.
У собственных объектов есть внутреннее 9X_.js свойство [[Class]] одного из следующих:
«Аргументы», «Массив», «Логическое», «Дата», «Ошибка», «Функция», «JSON», «Математика», «Число», «Объект», «Регулярное выражение», и «Строка».
Для 9X_javascript-library вашего bird1
это будет:
«Объект»
Как если бы вы создали 9X_js функцию:
function my_func() { // ... }
... my_func
не определен в ECMAScript, но 9X_javascript-execution это все еще собственный объект с внутренним 9X_vanilla-js [[Class]]:
«Функция»
Хост-объект - это объект, предоставляемый 9X_javascript-objects средой для того, чтобы служить определенной 9X_javascript-objects цели для этой среды, не определенной в спецификации.
Например:
var divs = document.getElementsByTagName('div')
Объект, на 9X_javascript-objects который ссылается divs
, - это NodeList, который интегрирован 9X_js в среду таким образом, что выглядит как 9X_javascript-execution обычный объект JavaScript, но нигде в спецификации 9X_javascriptobject не определен. .
Его внутреннее свойство [[Class]]:
«Список узлов»
Это 9X_javascript-dom дает разработчикам реализации некоторую 9X_ecmascript гибкость в адаптации реализации к конкретным 9X_.js потребностям среды.
Существуют требования 9X_vanilla-javascript к объектам хоста, которые определены в спецификации.
- +1, я согласен с вами, `bird` и` Bird` являются * собственными объектами *, они являются определяемой пользователем функцией (`Bird`) и объектом (` bird`), созданны ...
Ответ #4
Ответ на вопрос: В чем разница между собственными объектами и объектами хоста?
В дополнение к другим ответам, касающимся 9X_.js хост-объектов.
Объекты хоста зависят от среды. Таким 9X_javascript-library образом, рядом с объектами хоста браузеров 9X_javascript в nodejs также есть определенные объекты.
В 9X_js качестве примера сначала начнем со стандартных 9X_ecmascript объектов, определенных в Javascript. Затем 9X_javascript-library общие объекты для браузера / DOM. У узла 9X_javascript-dom есть собственные объекты.
- Примеры встроенных объектов стандартного Javascript:
- Объект
- Функция
- Логическое
- Символ
- Число
- Математика
- ... (See full list on MDN web docs)
- Объекты хоста Объектная модель документа Примеры:
- Окно
- Документ
- История
- ... (See full list on DOM objects on MDN web docs)
- XMLHttpRequest (часть веб-API)
- ... (See full list Web API on MDN web docs)
- Хост-объекты в Node.js:
- http
- https
- фс
- URL
- ОС
- ... (See full list on nodejs.org)
Ответ #5
Ответ на вопрос: В чем разница между собственными объектами и объектами хоста?
Не удалось найти убедительного ответа на 9X_javascriptobject вопрос, является ли var bird1 = new Bird();
собственным или основным 9X_javascriptobject объектом. Предполагая, что Bird - это функция, определяемая 9X_javascript пользователем, собственный невстроенный объект будет 9X_js создан в соответствии с http://es5.github.io/#x13.2 реализацией javascript. Напротив, собственные 9X_ecmascript встроенные объекты будут присутствовать с момента 9X_javascript-objects запуска программы javascript (например, Object 9X_js и многих других). Разница между собственным 9X_vanilla-javascript объектом и хост-объектом заключается в том, что 9X_javascript-library первый создается реализацией javascript, а 9X_javascript второй предоставляется хост-средой. В результате 9X_javascript-library внутреннее свойство [[class]] хост-объекта 9X_javascript-execution может отличаться от свойств, используемых 9X_js встроенными объектами (например, «Аргументы», «Массив», «Логическое», «Дата», «Ошибка», «Функция», « JSON 9X_javascript-dom »,« Math »,« Number »,« Object »,« RegExp 9X_javascript-dom »и« String »).
Также стоит отметить, что 9X_javascript-dom ECMA6 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf больше не использует терминологию 9X_javascript-objects native и host объектов. Вместо этого он 9X_vanillajs определяет типы объектов ниже с более четкими 9X_javascript-library объяснениями их предполагаемого поведения.
4.3.6 9X_vanillajs обычный объект
объект, который имеет поведение 9X_javascript по умолчанию для основных внутренних методов, которые 9X_javascript-objects должны поддерживаться всеми объектами
4.3.7 9X_javascriptobject экзотический объект
объект, не имеющий поведения 9X_javascript-execution по умолчанию для одного или нескольких основных 9X_ecmascript внутренних методов, которые должны поддерживаться 9X_javascript-execution всеми объектами. ПРИМЕЧАНИЕ Любой объект, который 9X_javascript-execution не является обычным объектом, является экзотическим 9X_vanillajs объектом.
Стандартный объект 4.3.8
объект, семантика 9X_javascript-dom которого определяется данной спецификацией
4.3.9 9X_ecmascript встроенный объект
объект, указанный и предоставляемый 9X_.js реализацией ECMAScript
Ответ #6
Ответ на вопрос: В чем разница между собственными объектами и объектами хоста?
Учитывая три объекта: Host, Native, Custom.
Хост-объекты 9X_javascript создаются средой и зависят от среды. Самая 9X_vanillajs известная среда - это веб-браузер, но может 9X_vanillajs быть и другая платформа. Объекты хоста, созданные 9X_vanilla-js в веб-браузере, могут быть объектом окна 9X_.js или документом. Обычно браузер использует 9X_vanillajs API для создания хост-объектов, отражающих 9X_.js объектную модель документа в JavaScript. (У 9X_javascript-library веб-браузера есть разные механизмы JavaScript, которые 9X_javascript-dom делают это) Объект хоста создается автоматически 9X_ecmascript в момент отображения страницы в браузере.
Собственный 9X_.js объект создается разработчиком с использованием 9X_javascript-library предопределенных классов JavaScript. Собственные 9X_javascript-objects объекты находятся в вашем письменном скрипте.
Затем 9X_vanilla-javascript пользовательский объект создается разработчиком 9X_javascript-library из пользовательского (не предопределенного 9X_javascript-library или частично предопределенного) класса.
-
38
-
54
-
54
-
10
-
40
-
69
-
14
-
5
-
37
-
5
-
3
-
5
-
39
-
6
-
12
-
8
-
2
-
3
-
4
-
17
-
33
-
3
-
1
-
43
-
2
-
4
-
28
-
3
-
2
-
2
-
5
-
1
-
3
-
3
-
16
-
4
-
7
-
10
-
1
-
15
-
2
-
4
-
9
-
24
-
3
-
13
-
7
-
11
-
4
-
3