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

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

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

为什么这不起作用?

演示

错误在puzzle.js的第238行

有帮助吗?

解决方案

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

如果是后者,问题很可能是在调用方法时,这个将不再引用 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