繁体   English   中英

为什么不能将对象的方法另存为另一个对象文字的属性

[英]Why can't I save an object's methods as properties of another object literal

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

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

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

为什么不起作用?

演示

错误在puzzle.js的238行上

到底是什么问题? 这些属性是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上的详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM