Javascript无法从模块实例化对象

时间:2012-09-25 10:12:38

标签: javascript class module closures

我对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

我做错了什么?

1 个答案:

答案 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;

我们正在打开一个小虫洞,以便游戏可以逃脱自我执行匿名功能关闭的微观世界。