Javascript 为什么可以';保存一个对象';s方法作为另一个对象文字的属性

Javascript 为什么可以';保存一个对象';s方法作为另一个对象文字的属性,javascript,function,methods,object-literal,Javascript,Function,Methods,Object Literal,下面的代码用于说明在特定情况下要运行的一些方法,以便可以使用更简单的语法调用它们 var callbacks = {alter: SPZ.sequenceEditor.saveAndLoadPuzzle, copy: SPZ.sequenceEditor.saveAsCopyAndLoadPuzzle, justSave:SPZ.sequenceEditor.saveAndLoadPuzzle}; 但是代码总是返回一个空对象。我已经使用c

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

var callbacks = {alter: SPZ.sequenceEditor.saveAndLoadPuzzle,
                 copy: SPZ.sequenceEditor.saveAsCopyAndLoadPuzzle,
           justSave:SPZ.sequenceEditor.saveAndLoadPuzzle};
但是代码总是返回一个空对象。我已经使用console.log检查了方法是否已定义。我还尝试过更改名称,调用一个空对象,然后将属性添加为例如callbacks.alter,并尝试了其他不重要的更改

为什么这样不行


错误在puzzle.js的第238行

到底是什么问题?属性是未定义的还是调用不能正常工作

如果是后者,则问题很可能是在调用方法时,
将不再引用
SPZ.sequenceEditor
,而是您的
回调
对象;要解决此问题,请使用helper函数
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()
才是必需的。请参阅。

中的详细信息,该代码应该有效。你能发布一个演示吗?是的,我想可能需要一个。在上面添加了一个链接如果I console.log(callbacks)是一个空的对象文本,即{},那么在向对象添加属性之后问题就出现了。我甚至没有“未定义”,虽然你的答案显然有效。目前还不完全确定原因,但我们会继续努力。最后,我发现我可以从所有方法中找到根,并用对对象的更牢固的锚定引用替换“this”。奇怪的是,萤火虫对问题的答案反馈如此之少。