JavaScript orienté objet (OOJS) 3 façons de créer des instances d'objet
Quand un langage de programmation est tout sur les objets, la première chose que nous devons apprendre est comment créer des objets. La création d'objets en JavaScript est assez simple: une paire d'accolades fera le travail, cependant, c'est ni le seul moyen créer un objet ni le seul moyen vous aurez jamais besoin d'utiliser.
En JavaScript, les instances d'objet sont créé à partir d'objets intégrés et venir à l'existence lorsque le programme est en cours d'exécution. Par exemple, Rendez-vous amoureux
est un objet intégré qui nous donne des informations sur les dates. Si nous voulons afficher la date du jour sur une page, nous besoin d'une instance d'exécution de Rendez-vous amoureux
qui porte les informations sur la date actuelle.
JavaScript nous permet également de définir nos propres objets qui peuvent produire leurs propres instances d'objet au moment de l'exécution. En javascript, tout est un objet et chaque objet a un ancêtre ultime appelé Objet
. La création d'une instance d'objet s'appelle instanciation.
1. Le Nouveau
opérateur
L’une des méthodes les plus courantes et les plus connues pour créer une nouvelle instance d’objet est la suivante: en utilisant le Nouveau
opérateur.
Tu as besoin d'un constructeur pour faire le Nouveau
travail de l'opérateur. Un constructeur est une méthode d'un objet qui assemble une nouvelle instance de cet objet. Sa syntaxe de base ressemble à ceci:
nouveau constructeur ()
Un constructeur peut accepter les arguments qui peut être utilisé pour changer ou ajouter des propriétés à l'instance d'objet qu'elle construit. Le constructeur a le même nom comme l'objet auquel il appartient.
Voici un exemple comment créer un exemple de Rendez-vous amoureux()
objet avec le Nouveau
mot-clé:
dt = nouvelle date (2017, 0, 1) console.log (dt) // dim. 01 janv. 2017 00:00:00 GMT + 0100
Rendez-vous amoureux()
est le constructeur pour créer un nouveau Rendez-vous amoureux
objet. Différents constructeurs pour un objet prendre des arguments différents pour créer le même type d'instances d'objet avec attributs variés.
Tous les objets intégrés à JavaScript ne peuvent pas être instanciés comme Rendez-vous amoureux
. Il y a des objets qui ne viens pas avec un constructeur: Math
, JSON
et Réfléchir
, mais ce sont encore des objets ordinaires.
Parmi les objets intégrés ayant un ou plusieurs constructeurs, symbole
ne peut pas être appelé dans le style constructeur instancier une nouvelle symbole
exemple. Ça ne peut être que appelé en tant que fonction qui retourne une nouvelle symbole
valeur.
De plus, parmi les objets intégrés ayant un ou plusieurs constructeurs, tous n'ont pas besoin que leurs constructeurs soient appelés avec le Nouveau
opérateur pour être instancié. Une fonction
, Tableau
, Erreur
, et RegExp
peut aussi être appelé comme fonction, sans utiliser le Nouveau
mot-clé, et ils vont instancier et renvoyer une nouvelle instance d'objet.
2. Le Réfléchir
objet
Les programmeurs backend sont peut-être déjà familiarisés avec API de réflexion. La réflexion est une fonctionnalité des langages de programmation pour inspecter et mettre à jour certaines des entités de base, tels que des objets et des classes, à l'exécution.
En JavaScript, vous pouvez déjà effectuer certains opérations de réflexion utilisant Objet
. Mais un API de réflexion appropriée a finalement fini par exister en JavaScript.
le Réfléchir
objet a un ensemble de méthodes pour créer et mettre à jour des instances d'objet. le Réfléchir
objet n'a pas de constructeur, il ne peut donc pas être instancié avec le Nouveau
opérateur, et, tout comme Math
et JSON
, il ne peut pas être appelé en tant que fonction non plus.
toutefois, Réfléchir
a un équivalent du Nouveau
opérateur: la Reflect.construct ()
méthode.
Reflect.construct (cible, argumentsList [, newTarget])
Les deux cible
et l'option newTarget
les arguments sont objets ayant leurs propres constructeurs, tandis que argumentsList
est un liste d'arguments être passé au constructeur de cible
.
var dt = Reflect.construct (Date, [2017, 0, 1]); console.log (dt); // dim. Janv. 01 2017 00:00:00 GMT + 0100
Le code ci-dessus a le même effet comme instanciant Rendez-vous amoureux()
en utilisant le Nouveau
opérateur. Bien que vous puissiez toujours utiliser Nouveau
, La réflexion est un ECMAScript 6 standard. Cela vous permet également de utiliser le newTarget
argument, qui est un autre avantage sur le Nouveau
opérateur.
La valeur de newTarget
Le prototype de (c'est tout à fait le prototype de newTarget
le constructeur devient le prototype de l'instance nouvellement créée.
Un prototype est le propriété d'un objet, dont la valeur est aussi un objet, portant les propriétés de l'objet d'origine. En bref, un objet tire ses membres de son prototype.
Ici, voyons un exemple:
classe A constructor () this.message = function () console.log ('message de A') classe B constructor () message () console.log ('message de B') data () console.log ('données de B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // message de console.log (obj.data ()); // données de B console.log (obj instanceof B) // true
En passant B
comme troisième argument à Reflect.construct ()
, la valeur prototype du obj
objet est fait pour être le même comme le prototype de B
Le constructeur de (qui a les propriétés message
et Les données
).
Ainsi, obj
peut accéder au message
et Les données
, disponible sur son prototype. Mais depuis obj
est fabriqué en utilisant UNE
, il a aussi son propre message
il reçu de UNE
.
Même si obj
est construit comme un tableau, il est pas un exemple de Tableau
, parce que son prototype est réglé pour Objet
.
obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false
Reflect.construct ()
peut être utile lorsque vous souhaitez créer un objet en utilisant plus d'un plan.
3. Le Object.create ()
méthode
Vous pouvez également créer un nouvel objet ordinaire avec un prototype spécifique via Object.create ()
. Cela aussi peut sembler très similaire à l’utilisation de la Nouveau
opérateur, mais ce n'est pas.
Object.create (O [, propertiesObject])
le O
l'argument est un objet qui sert le prototype pour le nouvel objet qui sera créé. L'option propertiesObject
l'argument est un liste des propriétés vous voudrez peut-être ajouter au nouvel objet.
classe A constructor () message () console.log ('message de A') var obj = Object.create (new A (), données: enregistrable: true, configurable: true, valeur: function () return 'données de obj') console.log (obj.message ()) // message de console.log (obj.data ()) // données de obj obj1 = Object.create ( new A (), foo: Writable: true, configurable: true, valeur: function () return 'foo from obj1') console.log (obj1.message ()) // message provenant d'une console. log (obj1.foo ()) // foo de obj1
dans le obj
objet, la propriété ajoutée est Les données
, en obj1
, ses foo
. Donc, comme vous le voyez, nous pouvons avoir propriétés et méthodes ajoutées à un nouvel objet.
C’est génial quand vous voulez créer plusieurs objets du même genre mais avec différentes propriétés ou méthodes supplémentaires. le Object.create ()
la syntaxe évite de les coder séparément.