我对javascript模块和类感到困惑。我正在尝试创建我的类的对象,但它总是说“不能设置未定义的属性”或“对象没有方法”。 有我的模块2.js:
(function() {
var Game = function() {
this.state = 'a';
};
Game.prototype.somefunc = function() {
console.log(this.state);
};
})();
这是主要的应用代码:
var g = require('./2.js');
var mygame = new g.Game;
mygame.somefunc();
//undefined is not a function error
或
var g = require('./2.js');
var mygame = g.Game;
mygame.somefunc();
//cannot call method of undefined error
我做错了什么?
答案 0 :(得分:0)
在你的第一个Game函数中,它只存在于(function(){})()闭包内。它在自己的小宇宙中生活并死在里面。
你必须把它暴露在外面。
中的“var”
var Game = function(){}
表示它只在闭包范围内定义。
你需要这样的东西:
var g = require('./2.js');
(function() {
var Game = function() {
this.state = 'a';
};
Game.prototype.somefunc = function() {
console.log(this.state);
};
g.Game = Game;
})();
var mygame = new g.Game;
mygame.somefunc();
现在,您对此进行编码的确切方式将取决于2.js的确切设置方式。这只是为了说明关键线是
g.Game = Game;
我们正在打开一个小虫洞,以便游戏可以逃脱自我执行匿名功能关闭的微观世界。