Pergunta

O código a seguir é usado para observar alguns métodos para executar em circunstâncias particulares para que eles possam ser chamados usando uma sintaxe mais simples.

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

Mas o código mantém retornando um objeto vazio. Eu verifiquei com console.log que os métodos são definidos. Eu também tentei mudar os nomes, invocando um objeto vazio e, em seguida, adicionando as propriedades como, por exemplo callbacks.alter, e tentou outras mudanças que não deve importar.

Por que não vai funcionar?

Demonstração

de erro é na linha 238 de puzzle.js

Foi útil?

Solução

O que é exatamente o problema? Será que as propriedades sejam undefined ou as chamadas simplesmente não funcionam corretamente?

Neste último caso, o problema é mais provável que ao chamar os métodos, this deixarão de se referir a SPZ.sequenceEditor, mas seu objeto callbacks; para resolver esse problema, use a função de ajudante bind() (como definido por vários quadros) ou embrulhar as chamadas se:

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

O apply() só é necessária se os métodos levam argumentos. Veja detalhes em MDC .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top