Perché non riesco a salvare i metodi di un oggetto come proprietà di un altro oggetto letterale
-
08-07-2019 - |
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?
L'erroreè sulla riga 238 di puzzle.js
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 .