Pourquoi ne puis-je pas enregistrer les méthodes d'un objet en tant que propriétés d'un autre littéral d'objet?

StackOverflow https://stackoverflow.com/questions/1816846

Question

Le code ci-dessous est utilisé pour noter certaines méthodes à exécuter dans des circonstances particulières afin de pouvoir être appelées à l'aide d'une syntaxe plus simple.

var callbacks = {alter: SPZ.sequenceEditor.saveAndLoadPuzzle,
                 copy: SPZ.sequenceEditor.saveAsCopyAndLoadPuzzle,
           justSave:SPZ.sequenceEditor.saveAndLoadPuzzle};

Mais le code renvoie toujours un objet vide. J'ai vérifié avec console.log que les méthodes sont définies. J'ai également essayé de modifier les noms, d'appeler un objet vide, puis d'ajouter les propriétés, par exemple, callbacks.alter, et d'essayer d'autres modifications qui ne devraient pas avoir d'importance.

Pourquoi ça ne marche pas?

démo

erreur est sur la ligne 238 de puzzle.js

Était-ce utile?

La solution

Quel est exactement le problème? Les propriétés seront-elles non définies ou les appels ne fonctionneront-ils pas correctement?

Si ce dernier point, le problème est probablement que lors de l'appel des méthodes, this ne fera plus référence à SPZ.sequenceEditor , mais à vos rappels objet; pour résoudre ce problème, utilisez la fonction d'assistance bind () (définie par plusieurs frameworks) ou encapsulez vous-même les appels:

var callbacks = {
    alter: function() {
        return SPZ.sequenceEditor.saveAndLoadPuzzle.apply(
            SPZ.sequenceEditor, arguments);
    },
    copy: function() {
        return SPZ.sequenceEditor.saveAsCopyAndLoadPuzzle.apply(
            SPZ.sequenceEditor, arguments);
    },
    justSave: function() {
        return SPZ.sequenceEditor.saveAndLoadPuzzle.apply(
            SPZ.sequenceEditor, arguments);
    }
};

Le apply () n'est nécessaire que si les méthodes prennent des arguments. Voir les détails à l'adresse MDC .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top