Domanda

Il codice seguente viene utilizzato per annotare alcuni metodi da eseguire in circostanze particolari in modo che possano essere chiamati utilizzando una sintassi più semplice.

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

Ma il codice continua a restituire un oggetto vuoto. Ho verificato con console.log che i metodi sono definiti. Ho anche provato a cambiare i nomi, invocare un oggetto vuoto e quindi aggiungere le proprietà come ad esempio callbacks.alter, e ho provato altre modifiche che non dovrebbero importare.

Perché non funziona?

Demo

L'errore

è sulla riga 238 di puzzle.js

È stato utile?

Soluzione

Qual è esattamente il problema? Le proprietà saranno undefined o le chiamate non funzioneranno correttamente?

In quest'ultimo caso, il problema è molto probabile che quando si chiamano i metodi, this non farà più riferimento a SPZ.sequenceEditor , ma al callbacks oggetto; per risolvere questo problema, utilizzare la funzione di supporto bind () (come definita da diversi framework) o concludere da soli le chiamate:

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);
    }
};

apply () è necessario solo se i metodi accettano argomenti. Vedi i dettagli su MDC .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top