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”。奇怪的是,萤火虫对问题的答案反馈如此之少。