Page d'accueil » Codage » JavaScript orienté objet (OOJS) 3 façons de créer des instances d'objet

    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 newTargetLe prototype de (c'est tout à fait le prototype de newTargetle 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 BLe 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.