Почему я не могу сохранить методы объекта как свойства другого литерала объекта

StackOverflow https://stackoverflow.com/questions/1816846

Вопрос

Приведенный ниже код используется для обозначения некоторых методов, которые должны выполняться в определенных обстоятельствах, чтобы их можно было вызывать с использованием более простого синтаксиса.

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

Но код продолжает возвращать пустой объект. Я проверил с console.log, что методы определены. Я также попытался изменить имена, вызвать пустой объект и затем добавить свойства, например, callbacks.alter, и пробовал другие изменения, которые не должны иметь значения.

Почему это не сработает?

Демонстрация

ошибка в строке 238 файла puzzle.js

Это было полезно?

Решение

В чем именно проблема? Свойства будут undefined или вызовы будут работать некорректно?

Если последнее, проблема, скорее всего, заключается в том, что при вызове методов this больше не будет ссылаться на SPZ.sequenceEditor , а на ваши обратные вызовы объект; Чтобы решить эту проблему, используйте вспомогательную функцию bind () (как определено в нескольких платформах) или оберните вызовы самостоятельно:

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 () необходимо, только если методы принимают аргументы. Подробности см. На MDC .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top