¿Este último simplemente se refiere a objetos de función no primarios que fueron creados por un constructor personalizado (por ejemplo, var bird1 = new Bird ();)?
:)
¿Este último simplemente se refiere a objetos de función no primarios que fueron creados por un constructor personalizado (por ejemplo, var bird1 = new Bird ();)?
:)
Respuestas:
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 anfitrión.
Fuente: http://es5.github.com/#x4.3.8
Algunos ejemplos:
Objetos nativos: Object(constructor), Date, Math, parseInt, eval, métodos de cuerda como indexOfy replace, métodos de arreglos, ...
Objetos anfitrión (asumiendo entorno de navegador): window, document, location, history, XMLHttpRequest, setTimeout, getElementsByTagName, querySelectorAll, ...
host objectdescrito en esta respuesta .
'Object', o se presentará mediante Object.prototype.toStringcomo '[object Object]'.
Birdes una función definida por el usuario, su semántica está "completamente definida" por la especificación ES (cómo funcionan los objetos de función, cómo se crean, ejecutan, usan con el newoperador, etc., etc., etc.) es un objeto nativo ... podría dejar una respuesta ...
Es más claro si distinguimos entre tres tipos de objetos:
Objetos incorporados : String, Math, RegExp, Object, Functionetc - básicos predefinidos siempre objetos disponibles en JavaScript. Definido en la especificación ECMAScript.
Objetos host : objetos como window, XmlHttpRequest, nodos DOM y así sucesivamente, que es proporcionada por el entorno del navegador. Son distintos de los objetos integrados porque no todos los entornos tendrán los mismos objetos de host. Si JavaScript se ejecuta fuera del navegador, por ejemplo, como lenguaje de programación 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, 'Bird' en su ejemplo sería un objeto de usuario.
La especificación de JavaScript agrupa los objetos integrados y los objetos de usuario como objetos nativos . Este es un uso poco ortodoxo del término "nativo", ya que los objetos de usuario se implementan obviamente en JavaScript, mientras que los incorporados probablemente se implementan en un idioma diferente bajo el capó, tal como lo serían los objetos del host. Pero desde la perspectiva de la especificación de JavaScript, tanto los objetos incorporados 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.
Aquí está mi comprensión de la especificación.
Esta:
var bird = new Bird();
... da como resultado un objeto nativo que simplemente se creó con el newoperador.
Los objetos nativos tienen una propiedad [[Class]] interna de uno de los siguientes:
"Argumentos", "Matriz", "Booleano", "Fecha", "Error", "Función", "JSON", "Matemáticas", "Número", "Objeto", "RegExp" y "Cadena" .
Para tu bird1será:
"Objeto"
Como si crearas una función:
function my_func() {
// ...
}
... my_funcno está definido en ECMAScript, pero sigue siendo un objeto nativo con la [[Clase]] interna:
"Función"
Un objeto anfitrión es un objeto proporcionado por el entorno con el fin de cumplir un propósito específico para ese entorno no definido por la especificación.
Por ejemplo:
var divs = document.getElementsByTagName('div')
El objeto al que hace referencia divses un NodeList , que 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 propiedad interna [[Class]] es:
"NodeList"
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 host que se definen en toda la especificación.
birdy Birdson objetos nativos , son una función definida por el usuario ( Bird) y un objeto ( bird) creado por el uso de la función como constructor, toda la semántica de esto se define en la especificación. Acerca de los objetos host, no confíe demasiado en la [[Class]]propiedad interna, por ejemplo window.alerttiene "Function"como valor de su [[Class]]propiedad casi todas las implementaciones, en IE tiene "Object", y todavía es un objeto host ...
[[Class]]. Más bien para usarlo como una visión tangible de cómo los implementadores han interpretado los diferentes tipos de objetos. Entonces, ¿ window.alerttener un interno [[Class]]de "Function"parecería ser una violación de ES 5?
divs/NodeListobtengo un object. Supongo que todavía no lo entiendo, pero ¿no lo convertiría en un objeto nativo?
windowmuestra todos los objetos del host
No pude ver una respuesta convincente a la pregunta de si var bird1 = new Bird();es un objeto nativo o anfitrión. Suponiendo que Bird es una función definida por el usuario, se creará un objeto nativo no integrado de acuerdo con http://es5.github.io/#x13.2 mediante la implementación de JavaScript. Por el contrario, nativo integradolos objetos estarán presentes desde el inicio de un programa javascript (como Object y muchos otros). Una diferencia entre un objeto nativo y un objeto host es que el primero lo crea la implementación de JavaScript y el segundo lo proporciona el entorno host. Como resultado, la propiedad interna [[clase]] del objeto host puede ser diferente de las utilizadas por los objetos integrados (es decir, "Argumentos", "Matriz", "Booleano", "Fecha", "Error", "Función", JSON "," Matemáticas "," Número "," Objeto "," RegExp "y" Cadena ").
Además, vale la pena señalar que ECMA6 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf ya no usa la terminología nativa y objetos host. En cambio, define a continuación los tipos de objetos, con explicaciones más claras de su comportamiento previsto.
4.3.6 objeto ordinario
objeto que tiene el comportamiento predeterminado para los métodos internos esenciales que deben ser compatibles con todos los objetos
4.3.7 objeto exótico
objeto que no tiene el comportamiento predeterminado para uno o más de los métodos internos esenciales que deben ser compatibles con todos los objetos. NOTA Cualquier objeto que no sea un objeto ordinario es un objeto exótico.
4.3.8 objeto estándar
objeto cuya semántica está definida por esta especificación
4.3.9 objeto incorporado
objeto especificado y proporcionado por una implementación de ECMAScript
Además de las otras respuestas con respecto a los objetos de host.
Los objetos de host son específicos de un entorno. Entonces, a continuación, los objetos del host del navegador, también hay objetos específicos para nodejs.
Por el bien del ejemplo, primero comience con los objetos estándar como se define en Javascript. Luego, los objetos comunes para el navegador / DOM. El nodo tiene sus propios objetos.
Ejemplos de objetos integrados estándar de Javascript :
Ejemplos de modelos de objetos de documento de objetos de host :
Objetos de host en Node.js :
Considerando tres objetos: Host, Native, Custom.
Los objetos de host son creados por el entorno y son específicos del entorno. El entorno más conocido sería un navegador web, pero podría ser otra plataforma. Los objetos de host creados en el navegador web podrían ser el objeto de la ventana o el documento. Normalmente, un navegador utiliza una API para crear objetos de host para reflejar el modelo de objetos de documento en JavaScript. (Los navegadores web tienen diferentes motores JavaScript que hacen esto) Un objeto host se crea automáticamente en el momento en que la página se representa en un navegador.
Un objeto nativo es creado por el desarrollador utilizando clases predefinidas de JavaScript. Los objetos nativos están en su secuencia de comandos escrita.
Luego, el desarrollador crea un objeto personalizado a partir de una clase personalizada (no predefinida o parcialmente predefinida).
Los objetos nativos son objetos que se adhieren a las especificaciones, es decir, "objetos estándar".
Los objetos de host son objetos que proporciona el navegador (u otro entorno de ejecución como Node).
La mayoría de los objetos de host son objetos nativos, y cada vez que crea una instancia de algo usando new, puede estar 99,99% seguro de que es un objeto nativo, a menos que juegue con objetos host extraños.
Esta noción se ha introducido debido a la presencia de objetos muy extraños en IE (¿y otros navegadores antiguos?) . Por ejemplo:
typeof document.all == "undefined"; // true
document.all.myElementId; // object
Al ver esto, todos estarían de acuerdo en que document.alles claramente "no estándar" y, por lo tanto, un objeto host no nativo .
Entonces, ¿por qué no llamar a los objetos nativos objetos estándar en primer lugar? Simple: después de todo, el documento Estándar (!) También habla de objetos no nativos, y llamarlos no estándar conduciría a una paradoja.
De nuevo:
Esto puede ser excesivo, pero por simplicidad, un objeto nativo es uno que existe y se puede usar en cualquier entorno que implemente un motor compatible con ECMAScript. Suele ser (pero no siempre) un navegador.
Por lo tanto, su Internet Explorer o su Google Chrome, no hace que el objeto String esté disponible para usted, por ejemplo. La razón por la que puede utilizar el objeto String es porque es "nativo" (integrado) del lenguaje JavaScript en sí.
Sin embargo, si desea crear una ventana emergente, deberá utilizar el objeto de ventana. El objeto de ventana lo proporciona el software del navegador, por lo que no es nativo de JavaScript, pero es parte del "Modelo de objeto del navegador" o la lista de materiales.