一个奇怪的原型装载Yabble.js的东西

时间:2012-08-10 13:00:34

标签: javascript require

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

它工作正常。但这感觉非常虚伪。

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

有什么想法吗?

0 个答案:

没有答案