¿Qué es un "objeto nativo" de ECMAScript?

Según la ECMA-262 un objeto nativo

objeto en una implementación de ECMAScript cuya semántica está completamente definida por esta especificación en lugar del entorno del host

Un objeto integrado se define como

objeto proporcionado por una implementación de ECMAScript, independiente del entorno host, que está presente al inicio de la ejecución de un programa ECMAScript.

con una nota

Los objetos integrados estándar se definen en esta especificación, y una implementación de ECMAScript puede especificar y definir otras. Cada objeto integrado es un objeto nativo.

Si un objeto nativo está completamente definido por la especificación ECMA-262 en lugar del entorno de host y una implementación de ECMAScript puede especificar y definir nuevos objetos integrados, ¿cómo es posible que estos nuevos objetos integrados puedan ser objetos nativos cuando no lo son? completamente definido por la especificación ECMA-262?

¿Qué me estoy perdiendo?

preguntado el 08 de noviembre de 11 a las 15:11

3 Respuestas

Son "nativos" porque vienen con ECMAScript implementación. Un entorno de host en una aplicación generalmente que consta de una implementación de ECMAScript y varias otras interfaces que funcionan juntas. Por ejemplo,

  • Web Browser - un entorno de host que consta de la implementación de ECMAScript, la interfaz DOM, el motor de renderizado, la interfaz de usuario, etc.
  • Windows Script Host - un entorno de host que consta de implementación de ECMAScript, implementación de VBScript, etc.
  • Node.js - un entorno de host que consta de implementación de ECMAScript (V8), interfaces HTTP, etc.

Los objetos "integrados" son son requeridos heredar de Object or Function, mientras que objetos de acogida - los objetos proporcionados por el entorno del host, pero no necesariamente presentes al inicio de la ejecución - no se requieren, pero pueden (ya veces lo hacen).

Ejemplos de objetos nativos definidos por ECMA-262

  • Object(), Array(), Date()
  • Math, JSON, el objeto Global.

Ejemplos de objetos nativos integrados no definido por ECMA-262

Ejemplos de objetos host

  • Objetos DOM, document y window
  • console

contestado el 23 de mayo de 17 a las 15:05

¿Está seguro de que no hay objetos integrados que Object.getPrototypeOf(obj) no contiene Object.prototype ? - Raynos

Tenga en cuenta que WeakMap no es una extensión patentada, es una implementación de una propuesta de Harmony. También ActiveXObject() es un objeto anfitrión y no un objeto nativo. - gsnedders

@gsnedders: ActiveXObject() is un objeto nativo, pero devuelve un objeto host. Incluso en versiones anteriores de IE y JScript, ActiveXObject.prototype está presente mientras que no está en todos los demás objetos de acogida. También, WeakMap() es una extensión hasta que Harmony se convierte en ES 6 :-p - Andy E

@Raynos @AndyE Object.getPrototypeOf(Object.prototype) === null. El Object El objeto prototipo es el único integrado que no tiene la Object objeto prototipo en su cadena de prototipos. - gsnedders

@Raynos No es propietario porque está lo suficientemente especificado para ser implementado por cualquier persona. No es estándar, es cierto, pero no es propietario. - gsnedders

La semántica de un objeto nativo están completamente definidos por ECMA-262. El objeto en sí puede no serlo.

Entonces tenemos tres niveles de objetos:

  1. Objetos integrados estándar: definido ECMA-262 y sigue la semántica ECMA-262. Ejemplo: Object.
  2. Otros objetos incorporados: no definido en ECMA-262, pero sigue la semántica ECMA-262. Ejemplo: setTimeout.
  3. Objetos de host: no siga la semántica ECMA-262; pueden tener un comportamiento extraño de cualquier tipo e interactuar con los objetos incorporados en EMCA-262 de formas extrañas e inesperadas (por ejemplo, mintiendo sobre varias propiedades internas). Ejemplo: NodeList.

respondido 08 nov., 11:19

setTimeout no es un objeto integrado, es un objeto host (es parte del DOM). - Andy E

Yo mismo no estoy completamente claro, pero estoy bastante seguro de que sigue la semántica ECMA-262, lo que lo convertiría en una función incorporada de estas definiciones, ¿verdad? - Domenic

Los objetos host pueden seguir la semántica ECMA-262 si así lo desean. Lamentablemente, en versiones anteriores de IE y otros navegadores, este no es el caso. Incluso setTimeout instanceof Function devoluciones false y typeof setTimeout devoluciones "object" en IE 7 y versiones inferiores. - Andy E

La definición de native object es el término relativo de host object
Como window.console object es un objeto host que Ecma262 no ha sido documentado para decirle al navegador cómo implementarlo.
Y Ecma262 es solo un proyecto para especificar el idioma de la función. La implementación de ECMAScript en realidad es asunto del navegador. Eso significa que la implementación cumple con la especificación en el object typepodemos decirlo built-in object aunque no funcionan exactamente igual.

respondido 09 nov., 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.