10
votes

Créer de manière dynamique une nouvelle classe JavaScript à partir d'un objet existant

dire que j'ai le code suivant:

var anotherAlbum = new Album();


0 commentaires

5 Réponses :


5
votes

JavaScript "classes", tout comme n'importe quel autre objet, peut être créé de manière dynamique. Donc, oui, cela peut être fait.

Vous feriez quelque chose comme celui-ci dans le code qui gère la réponse Ajax (en supposant que la réponse AJAX fournissait le nom de la nouvelle "classe", et c'est dans une variable appelée NewClassName) : xxx


1 commentaires

Ma principale question serait, comment créerez-vous l'objet "album" afin de pouvoir être appelé à tout moment de l'application



4
votes

Ceci est en fait le seul à l'héritage que JavaScript a. JavaScript a Héritage prototypal (qui peut être utilisé pour recréer le héritage classique). Cela signifie que l'héritage provient d'un autre objet, pas une définition de classe.

Pour créer un objet, toutes les propriétés d'un autre objet sont simples: P>

function Album() {
   // do whatever initialization you need to here, all the properties of album 
   // are available on 'this'
   // e.g.,
   doSomething(this.albumName);
}
Album.prototype = album;

var anotherAlbum = new Album();


0 commentaires

11
votes

JavaScript est prototypal, pas classique, donc si vous pensez en termes de cours, vous le faites mal.

Vous n'avez pas à utiliser le nouvel opérateur du tout. Vous pouvez créer un nouvel objet à l'aide de l'objet littéral: xxx

alors vous pouvez créer une nouvelle instance de cet objet: xxx < p> Maintenant, vous pouvez modifier les attributs de mysecondObject , et s'il dispose de méthodes, vous pouvez les surcharger tout aussi facilement: xxx

et ensuite mysecondObject aura bien sûr toutes les propriétés que vous avez données MyObject à la création.

Sachez qu'il s'agit d'une version simple et que cela laisse tous les attributs " Publique'. Si vous avez besoin d'une confidentialité, il peut être réalisé en ajoutant des fonctions au mélange. C'est un peu plus compliqué cependant, alors laissez-moi savoir si vous êtes intéressé ...


0 commentaires

1
votes

Vous pouvez utiliser le modèle de héritage fonctionnel de Douglas Crockford. Code de JavaScript Good Pièces Book

var mammal = function (spec) {
    var that = {};

    that.get_name = function (  ) {
        return spec.name;
    };

    that.says = function (  ) {
        return spec.saying || '';
    };

    return that;
};

var myMammal = mammal({name: 'Herb'});


var cat = function (spec) {
    spec.saying = spec.saying || 'meow';
    var that = mammal(spec);
    that.purr = function (n) {
        var i, s = '';
        for (i = 0; i < n; i += 1) {
            if (s) {
                s += '-';
            }
            s += 'r';
        }
        return s;
    };
    that.get_name = function (  ) {
        return that.says(  ) + ' ' + spec.name +
                ' ' + that.says(  );
    return that;
};

var myCat = cat({name: 'Henrietta'});


0 commentaires

-2
votes

Vous pouvez faire ce xxx


1 commentaires

Je ne vois pas comment cela répond à la question de 5 ans.