2

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

我究竟做错了什么?

4

1 回答 1

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;

我们正在打开一个小虫洞,以便 Game 可以逃离其自我执行匿名函数闭包的缩影宇宙。

于 2012-09-25T11:37:45.987 回答