我有一个非常奇怪的问题,我不得不假设是因为 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(...);
它工作正常。但这感觉真的很骇人听闻。
所以我的问题不是如何让它工作,因为我已经有了,而是为什么它是一个问题以及如何让它像它应该的那样工作。
有什么想法吗?