Ce dernier se réfère-t-il simplement à des objets de fonction non primitifs créés par un constructeur personnalisé (par exemple, var bird1 = new Bird ();)?
javascript
ppecher
la source
la source
new Image()
- est un objet hôte, par exemple.:)
Réponses:
Les deux termes sont définis dans la spécification ECMAScript:
Source: http://es5.github.com/#x4.3.6
Source: http://es5.github.com/#x4.3.8
Quelques exemples:
Objets natifs:
Object
(constructeur),Date
,Math
,parseInt
,eval
, les méthodes de chaînes commeindexOf
etreplace
, les méthodes de tableau, ...Objets d'accueil ( en supposant l' environnement du navigateur):
window
,document
,location
,history
,XMLHttpRequest
,setTimeout
,getElementsByTagName
,querySelectorAll
, ...la source
host object
décrit dans cette réponse .'Object'
ou présenté parObject.prototype.toString
comme'[object Object]'
.Bird
s'agit d'une fonction définie par l'utilisateur, sa sémantique est "entièrement définie" par la spécification ES (comment fonctionnent les objets de fonction, comment ils sont créés, exécutés, utilisés avec l'new
opérateur, etc., etc., etc.) c'est un objet natif ... je pourrais laisser tomber une réponse ...C'est plus clair si l'on distingue trois types d'objets:
Objets intégrés :
String
,Math
,RegExp
,Object
,Function
etc. - objets prédéfinis de base toujours disponibles en JavaScript. Défini dans la spécification ECMAScript.Objets hôtes : objets comme
window
,XmlHttpRequest
, noeuds DOM et ainsi de suite, qui est fourni par l'environnement du navigateur. Ils sont distincts des objets intégrés car tous les environnements n'auront pas les mêmes objets hôtes. Si JavaScript s'exécute en dehors du navigateur, par exemple en tant que langage de script côté serveur comme dans Node.js, différents objets hôtes seront disponibles.Objets utilisateur : objets définis dans le code JavaScript. Ainsi, «Bird» dans votre exemple serait un objet utilisateur.
La spécification JavaScript regroupe les objets intégrés et les objets utilisateur en tant qu'objets natifs . Il s'agit d'une utilisation peu orthodoxe du terme «natif», car les objets utilisateur sont évidemment implémentés en JavaScript alors que les éléments intégrés sont très probablement implémentés dans un langage différent sous le capot, tout comme le seraient les objets hôtes. Mais du point de vue de la spécification JavaScript, les objets intégrés et utilisateur sont natifs de JavaScript car ils sont définis dans la spécification JavaScript, contrairement aux objets hôtes.
la source
Voici ma compréhension de la spécification.
Ce:
... aboutit à un objet natif qui a simplement été créé à l'aide de l'
new
opérateur.Les objets natifs ont une propriété [[Class]] interne de l'une des propriétés suivantes:
Pour votre
bird1
ce sera:Tout comme si vous créez une fonction:
...
my_func
n'est pas défini dans ECMAScript, mais il s'agit toujours d'un objet natif avec la [[Class]] interne:Un objet hôte est un objet fourni par l'environnement afin de servir un objectif spécifique à cet environnement non défini dans la spécification.
Par exemple:
L'objet référencé par
divs
est un NodeList , qui est intégré dans l'environnement de telle manière qu'il ressemble à un objet JavaScript normal, mais il n'est défini nulle part par la spécification.Sa propriété interne [[Class]] est:
Cela offre aux concepteurs d'implémentation une certaine flexibilité pour adapter l'implémentation aux besoins spécifiques de l'environnement.
Certaines exigences relatives aux objets hôtes sont définies dans la spécification.
la source
bird
etBird
sont des objets natifs , ce sont une fonction définie par l'utilisateur (Bird
), et un objet (bird
) créé par l'utilisation de la fonction en tant que constructeur, toute la sémantique de ceci est définie sur la spécification. A propos des objets hôtes, ne comptez pas trop sur la[[Class]]
propriété interne, par exemplewindow.alert
a"Function"
comme valeur de sa[[Class]]
propriété presque toutes les implémentations, sur IE qu'il a"Object"
, et c'est toujours un objet hôte ...[[Class]]
. Plutôt juste pour l'utiliser comme un aperçu tangible de la façon dont les implémenteurs ont interprété les différents types d'objets. Donc,window.alert
avoir un interne[[Class]]
de"Function"
semble être une violation de ES 5?divs/NodeList
j'obtiens unobject
. Je suppose que je ne comprends pas encore cela, mais cela ne ferait-il pas un objet natif?window
montre tous les objets hôtesImpossible de voir une réponse convaincante à la question de savoir s'il
var bird1 = new Bird();
s'agit d'un objet natif ou hôte. En supposant que Bird est une fonction définie par l'utilisateur, un objet natif non intégré sera créé conformément à http://es5.github.io/#x13.2 par l'implémentation javascript. En revanche, natif intégréles objets seront présents depuis le démarrage d'un programme javascript (comme Object et bien d'autres). Une différence entre un objet natif et un objet hôte est que le premier est créé par l'implémentation javascript et le second est fourni par l'environnement hôte. En conséquence, la propriété interne de l'objet hôte [[class]] peut être différente de celles utilisées par les objets intégrés (c'est-à-dire "Arguments", "Array", "Boolean", "Date", "Error", "Function", " JSON "," Math "," Number "," Object "," RegExp "et" String ").Il convient également de noter que ECMA6 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf n'utilise plus la terminologie native et host object . Au lieu de cela, il définit les types d'objets ci-dessous, avec des explications plus claires de leur comportement prévu.
la source
En plus des autres réponses concernant les objets hôtes.
Les objets hôtes sont spécifiques à un environnement. Ainsi, à côté des objets hôtes du navigateur, il existe également des objets spécifiques à nodejs.
Pour les besoins de l'exemple, en commençant par les objets Standard tels que définis en Javascript. Puis les objets communs pour le Browser / DOM. Node a ses propres objets.
Exemples d'objets intégrés Javascript standard :
Exemples de modèle d'objet de document Objets hôtes :
Objets hôtes dans Node.js :
la source
Considérant trois objets: hôte, natif, personnalisé.
Les objets hôtes sont créés par l'environnement et sont spécifiques à l'environnement. Le meilleur environnement connu serait un navigateur Web mais pourrait être une autre plate-forme. Les objets hôtes créés dans le navigateur Web peuvent être l'objet de fenêtre ou le document. En général, un navigateur utilise une API pour créer des objets hôtes afin de refléter le modèle d'objet de document en JavaScript. (Webbrowser a différents moteurs JavaScript qui font cela) Un objet hôte est créé automatiquement au moment où la page est rendue dans un navigateur.
Un objet natif est créé par le développeur à l'aide de classes prédéfinies de JavaScript. Les objets natifs sont dans votre script écrit.
Ensuite, un objet personnalisé est créé par le développeur à partir d'une classe personnalisée (non prédéfinie ou partiellement prédéfinie).
la source
Les objets natifs sont des objets qui adhèrent aux spécifications, c'est-à-dire des "objets standards".
Les objets hôtes sont des objets fournis par le navigateur (ou un autre environnement d'exécution comme Node).
La plupart des objets hôtes sont des objets natifs, et chaque fois que vous instanciez quelque chose en utilisant
new
, vous pouvez être sûr à 99,99% qu'il s'agit d'un objet natif, à moins que vous ne vous amusiez avec des objets hôtes étranges.Cette notion a été introduite en raison de la présence d'objets très bizarres dans IE (et d'autres anciens navigateurs?) . Par exemple:
En voyant cela, tout le monde conviendrait que
document.all
c'est clairement "non standard", et donc un objet hôte non natif .Alors pourquoi ne pas appeler les objets standards des objets natifs en premier lieu? Simple: après tout, le document Standard (!) Parle aussi d'objets non natifs, et les appeler non standard conduirait à un paradoxe.
Encore:
la source
Cela peut être excessif, mais pour simplifier, un objet natif est un objet existant et utilisable dans tout environnement qui implémente un moteur compatible ECMAScript. Il s'agit généralement (mais pas toujours) d'un navigateur.
Ainsi, votre Internet Explorer ou votre Google Chrome, ne met pas l'objet String à votre disposition, par exemple. La raison pour laquelle vous pouvez utiliser l'objet String est qu'il est "natif" (intégré) au langage JavaScript lui-même.
Cependant, si vous souhaitez créer une fenêtre contextuelle, vous devrez utiliser l'objet window. L'objet window est fourni par le logiciel de navigation lui-même, il n'est donc pas natif de JavaScript, mais il fait partie du "Browser Object Model" ou de la nomenclature.
la source