Почему я не могу сохранить методы объекта как свойства другого литерала объекта
-
08-07-2019 - |
Вопрос
Приведенный ниже код используется для обозначения некоторых методов, которые должны выполняться в определенных обстоятельствах, чтобы их можно было вызывать с использованием более простого синтаксиса.
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 .