¿Por qué no puedo guardar los métodos de un objeto como propiedades de otro objeto literal?
-
08-07-2019 - |
Pregunta
El siguiente código se utiliza para observar algunos métodos para ejecutarse en circunstancias particulares, de modo que puedan llamarse utilizando una sintaxis más simple.
var callbacks = {alter: SPZ.sequenceEditor.saveAndLoadPuzzle,
copy: SPZ.sequenceEditor.saveAsCopyAndLoadPuzzle,
justSave:SPZ.sequenceEditor.saveAndLoadPuzzle};
Pero el código sigue devolviendo un objeto vacío. He comprobado con console.log que los métodos están definidos. También intenté cambiar los nombres, invocar un objeto vacío y luego agregar las propiedades como, por ejemplo, callbacks.alter, e intenté otros cambios que no deberían importar.
¿Por qué no funciona esto?
el error está en la línea 238 de puzzle.js
Solución
¿Cuál es exactamente el problema? ¿Las propiedades serán undefined
o las llamadas simplemente no funcionarán correctamente?
Si es esto último, el problema es más probable que al llamar a los métodos, this
ya no se refiera a SPZ.sequenceEditor
, sino a sus devoluciones de llamada objeto; Para resolver este problema, use la función auxiliar
bind ()
(como se define en varios marcos) o envuelva las llamadas usted mismo:
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);
}
};
El apply ()
solo es necesario si los métodos toman argumentos. Vea los detalles en MDC .