我有一个非常奇怪的问题,我必须假设是因为Yabble.js。我之前从未使用过Yabble.js,而我现在唯一的原因是因为它是我正在使用的库(Gamejs)的依赖项,但我很想知道为什么会发生这种情况,以及它是否真的是Yabble。 js的错,或者可能是Gamejs的。
这是我的main.js的高度压缩(并修改为通用性)版本:
var gamejs = require('gamejs');
...
function Character(/*lots of arguments*/) {
Character.superConstructor.apply(this, arguments);
this.somethingtomakeitaprototypeforthisexample = oneofthearguments;
}
gamejs.utils.objects.extend(Character, gamejs.sprite.Sprite);
Character.prototype.draw = function(display){
display.blit(this.animator.image, this.pos);
}
... /*Skipping most of the file, irrelevant to the problem*/
function main() {
maincharacter = new Character(/* appropriate number and types of arguments */);
... /*skipping the rest*/
}
gamejs.ready(main);
我做了足够的调试,知道它进入main
函数没有问题,并且在调用Character
时发生了中断。以下是错误消息(来自Chrome控制台):
Uncaught TypeError: undefined is not a function
main
_readyResources
我已确定Character
是未定义的函数。但是,如果我这样定义我的就绪功能:
gamejs.ready(function(){
console.log('Character:');
console.log(Character);
main();
});
正确定义的Character
的完整内容打印出来,但我仍然在main
中收到错误。因此,我知道在Character
被调用之前,main
是由命名空间定义的。
有趣的事实是:我确实有一个解决方法。如果我将main
的函数原型更改为:
function main(CharacterClass) {...};
然后将就绪功能更改为:
gamejs.ready(function(){ main(Character); });
并将main
中的相关行更改为:
var character = new CharacterClass(...);
它工作正常。但这感觉非常虚伪。
所以我的问题不是如何让它工作,因为我已经有了它,而是为什么它是一个问题以及如何让它工作就像它应该。
有什么想法吗?