В чем разница между собственными объектами и объектами хоста?

Я не понимаю разницы между собственными объектами и объектами хоста в JavaScript. Относится 9X_javascript-dom ли последнее просто к объектам непримитивных 9X_vanillajs функций, которые были созданы пользовательским 9X_.js конструктором (например, var bird1 = new Bird();)?

102
3

  • @ ŠimeVidas: В вашем комментарии говорится, что * объекты хоста не определены в спецификации ECMAScript *. Ваш ответ гласит: * «Определения для обоих находятся в специфика ...
6
Общее количество ответов: 6

Ответ #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, ...

146
5

  • @ Š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 объекты хоста - нет.

33
0

Ответ #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 к объектам хоста, которые определены в спецификации.

17
1

  • +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 есть собственные объекты.

  1. Примеры встроенных объектов стандартного Javascript:
  1. Объекты хоста Объектная модель документа Примеры:
  1. Хост-объекты в Node.js:

4
0

Ответ #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

3
0

Ответ #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 или частично предопределенного) класса.

1
0