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?

Demo

el error está en la línea 238 de puzzle.js

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top