我是 js 中的 oop 新手。我正在使用 Box2dWeb 开发 HTML5 游戏,我决定应该让它完全基于 oop。所以我在一个名为physics.js
(function(window)
{
function Physics(element, scale){
//init world logic
}
Physics.prototype.debug = function(){
//debug draw logic
};
Physics.prototype.step = function(dt){
//step logic
};
//making this class(or object) visible on the global scope
//so i can create vars of this type anywhere in the application
window.Physics = Physics;
}(window));
现在我有一个主game.js
文件,我在其中初始化了我所有的游戏物理、图形、资产等。以下是内容:
(function(){
function init(){
var physics = new Physics(document.getElementById("b2dCanvas"), 30);
console.log(physics);
physics.debug();
}
window.addEventListener("load", init);
}());
这个文件,初始化我的物理对象没有任何问题。最终这就是我想要的。伟大的!但是,在此之前,文件是这样的,没有这个init()
功能。
(function(){
var physics = new Physics(document.getElementById("b2dCanvas"), 30);
console.log(physics);
physics.debug();
}());
这显然引发了错误Uncaught TypeError: Cannot call method 'getContext' of null
。这意味着,物理构造函数被调用(element
此时自然为空),而我没有调用它。这怎么可能?我的自执行函数game.js
应该已经初始化了Physics
对象吧?我错过了什么?