9
votes

Y a-t-il une raison d'utiliser objet.create () ou neuf en JavaScript?

J'utilise le mot-clé neuf en JavaScript jusqu'à présent. J'ai lu sur objet.create et je me demande si je devrais l'utiliser à la place. Ce que je ne reçois pas tout à fait, c'est que j'ai souvent besoin d'exécuter du code de construction, je ne vois donc pas comment objet.create va fonctionner du tout car il ne déclenche aucune fonction à exécuter.

Quelqu'un pourrait-il me dire, auquel cas devrais-je utiliser objet.create au lieu de nouveau ?


2 commentaires

Voir les réponses à cette question: Stackoverflow.com/Questtions/4166616/...


Voir aussi avec toutes les nouvelles réponses, Stackoverflow.com/Questtions/387707/...


4 Réponses :


14
votes

Jusqu'à présent, si vous souhaitez créer un objet, vous ne pouvez utiliser que les littéraux: xxx pré>

ou l'objet objet code> constructeur. p>

b = Object.create(a);
b.someOtherFunction = function(){};


3 commentaires

Peut-être que je suis dense, mais je ne comprends toujours pas quand vous utiliseriez objet.create vs nouveau? Pouvez-vous donner un exemple de code d'utilisation de objet.create et expliquez pourquoi les nouveaux n'auraient pas travaillé?


@ jfien00: vous utiliseriez objet.create si l'unique but d'une fonction de constructeur consiste à créer un objet vide qui hérite d'un autre objet.


Cela aide, merci. Il me semble que c'est une version en prise en charge de la langue de YUI étendue () utilisée pour créer un nouvel objet qui hérite du prototype d'un autre objet. Est-ce correct?



3
votes

Comme déjà mentionné, objet.create () code> est couramment utilisé lorsque vous souhaitez un moyen facile de définir le prototype d'un nouvel objet. Ce que les autres réponses ne parviennent pas à mentionner, c'est que les fonctions de constructeur (qui nécessitent de nouveau) ne sont pas toutes différentes de toute autre fonction.

En fait, toute fonction peut renvoyer un objet, et il est courant dans JavaScript pour voir les fonctions d'usine (comme des constructeurs, mais ils ne nécessitent pas neuf code> ou utilisent ceci code> pour faire référence au nouvel objet). Fonctions d'usine utilisez souvent objet.create () code> pour définir le prototype du nouvel objet. P>

var barPrototype = {
  open: function open() { /* ... */ },
  close: function close() { /* ... */ },
};
function createBar() {
  return Object.create(barPrototype);
}

var bar = createBar();


0 commentaires

3
votes

Super en retard sur ce fil .. Mais je pense qu'une distinction importante à faire est que, tandis que les constructeurs ne sont que des fonctions, le nouvel opérateur invoque la fonction et capture l'objet résultant qui peut être utile dans un environnement dynamique. Il permet de faire référence aux propriétés et aux méthodes lors de l'exécution du constructeur, ce qui peut être utile ou non en fonction de la situation. Si vous êtes plus préoccupé par un prototype défini, mais l'objet lui-même est plus statique que non, objet.create serait une meilleure option car elle est plus propre et ne gâche pas le protocreal de manière inattendue, car le nouvel opérateur .

Quelques exemples simples .. xxx

comme apposé à. xxx

Il devrait être légèrement plus clair pourquoi Vous voudriez utiliser un sur l'autre, comme une autre panne simple ...

Utilisez un nouveau lorsque vous vous souciez d'obtenir un objet dynamique et moins sur la chaîne prototype

Utiliser objet. Créez lorsque vous vous souciez d'être dynamique et davantage d'avoir une chaîne de prototype explicite. Je noterai également que les objets fabriqués avec objet.create peuvent également être construits de manière dynamique à l'aide d'une méthode appelée init que vous pouvez créer pour affecter des propriétés en fonction de vos besoins et simplement l'appeler sur votre objet fraîchement retourné. .

Chaque approche a cependant des hauts et des bas, mais leurs cas d'utilisation sont assez distincts à mon avis. Cependant, vous vous retrouverez probablement en utilisant objet.create, car la plupart des situations appelleront une situation moins dynamique et auront plus besoin d'héritage.


0 commentaires

0
votes

Le code source exact de la fonction Object.Create () est le suivant:

function Object.Create(proto, propertiesObject)
{
    var obj = {};

    Object.setPrototypeOf(obj, proto);

    if(propertiesObject)
    {
        Object.defineProperties(obj, propertiesObject);
    }

    return obj;
}


0 commentaires