下面的代码用于说明在特定情况下运行的一些方法,因此可以使用更简单的语法调用它们。
var callbacks = {alter: SPZ.sequenceEditor.saveAndLoadPuzzle,
copy: SPZ.sequenceEditor.saveAsCopyAndLoadPuzzle,
justSave:SPZ.sequenceEditor.saveAndLoadPuzzle};
但是代码不断返回一个空对象。我已经使用console.log检查了方法的定义。我也试过更改名称,调用一个空对象,然后添加属性,例如callbacks.alter,并尝试了其他无关紧要的更改。
为什么这不起作用?
错误在puzzle.js的第238行
答案 0 :(得分: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。