0

我有一个非常奇怪的问题,我不得不假设是因为 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(...);

它工作正常。但这感觉真的很骇人听闻。

所以我的问题不是如何让它工作,因为我已经有了,而是为什么它是一个问题以及如何让它像它应该的那样工作。

有什么想法吗?

4

0 回答 0