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

最初のゲーム関数では、(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 に答える