0

下面的代码用于记录一些在特定情况下运行的方法,以便可以使用更简单的语法调用它们。

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

但是代码一直返回一个空对象。我已经用 console.log 检查了这些方法是否已定义。我还尝试过更改名称,调用一个空对象,然后将属性添加为例如 callbacks.alter,并尝试了其他无关紧要的更改。

为什么这行不通?

演示

错误出现在puzzle.js 的第 238 行

4

1 回答 1

2

究竟是什么问题?属性是undefined还是调用不能正常工作?

如果是后者,问题很可能是在调用方法时,this将不再引用SPZ.sequenceEditor,而是您的callbacks对象;要解决此问题,请使用帮助函数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上的详细信息。

于 2009-11-29T21:53:58.060 回答