Queremos brindarte la mejor respuesta que descubrimos en internet. Esperamos que te resulte de utilidad y si puedes compartir algún detalle que nos pueda ayudar a mejorar hazlo libremente.
Solución:
Ambos términos se definen en la especificación ECMAScript:
objeto nativo
objeto en una implementación de ECMAScript cuya semántica está completamente definida por esta especificación en lugar de por el entorno del host.
NOTA Los objetos nativos estándar se definen en esta especificación. Algunos objetos nativos están integrados; otros pueden construirse durante el curso de la ejecución de un programa ECMAScript.
Fuente: http://es5.github.com/#x4.3.6
objeto anfitrión
objeto proporcionado por el entorno host para completar el entorno de ejecución de ECMAScript.
NOTA Cualquier objeto que no sea nativo es un objeto host.
Fuente: http://es5.github.com/#x4.3.8
Algunos ejemplos:
Objetos nativos: Object
(constructor), Date
, Math
, parseInt
, eval
, string métodos como indexOf
y replace
, array métodos, …
Objetos host (suponiendo un entorno de navegador): window
, document
, location
, history
, XMLHttpRequest
, setTimeout
, getElementsByTagName
, querySelectorAll
…
Es más claro si distinguimos entre tres clases de objetos:
Objetos incorporados: String
, Math
, RegExp
, Object
, Function
etc. – Objetos básicos predefinidos siempre disponibles en JavaScript. Definido en la especificación ECMAScript.
Objetos anfitriones: objetos como window
, XmlHttpRequest
, nodos DOM, etc., que proporciona el entorno del navegador. Son distintos de los objetos integrados porque no todos los entornos tendrán los mismos objetos host. Si JavaScript se ejecuta fuera del navegador, por ejemplo, como lenguaje de secuencias de comandos del lado del servidor como en Node.js, estarán disponibles diferentes objetos de host.
Objetos de usuario: objetos definidos en código JavaScript. Entonces, ‘Pájaro’ en su ejemplo sería un objeto de usuario.
La especificación de JavaScript agrupa los objetos incorporados y los objetos de usuario como objetos nativos. Este es un uso poco ortodoxo del término “nativo”, ya que los objetos de usuario obviamente se implementan en JavaScript, mientras que lo más probable es que los elementos integrados se implementen en un idioma diferente bajo el capó, al igual que los objetos host. Pero desde la perspectiva de la especificación de JavaScript, tanto los objetos integrados como los de usuario son nativos de JavaScript porque están definidos en la especificación de JavaScript, mientras que los objetos de host no lo están.
Aquí está mi comprensión de la especificación.
Esta:
var bird = new Bird();
…resulta en un Objeto nativo que simplemente se creó usando el new
operador.
Los objetos nativos tienen un interior [[Class]]propiedad de uno de los siguientes:
“Argumentos”, “Matriz”, “Booleano”, “Fecha”, “Error”, “Función”, “JSON”, “Matemáticas”, “Número”, “Objeto”, “RegExp” y “Cadena”.
Para tu bird1
será:
“Objeto”
Al igual que si creas una función:
function my_func()
// ...
…my_func
no está definido en ECMAScript, pero sigue siendo un objeto nativo con el interno [[Class]]:
“Función”
Un objeto host es un objeto proporcionado por el entorno para cumplir un propósito específico en ese entorno no definido por la especificación.
Por ejemplo:
var divs = document.getElementsByTagName('div')
El objeto al que hace referencia divs
es un lista de nodosque está integrado en el entorno de tal manera que se siente como un objeto JavaScript normal, pero no está definido en ninguna parte por la especificación.
su interior [[Class]]propiedad es:
“Lista de nodos”
Esto proporciona a los diseñadores de implementación cierta flexibilidad para adaptar la implementación a las necesidades específicas del entorno.
Hay requisitos de objetos anfitriones que se definen a lo largo de la especificación.
Comentarios y calificaciones
Si para ti ha sido de provecho nuestro post, sería de mucha ayuda si lo compartieras con otros seniors de este modo contrubuyes a extender nuestra información.