以前の記事で、とんでもない大嘘を書いてしまった。
Node.jsでオブジェクト指向のプログラミングについて、あたかもrequire()によって都度新しいインスタンスが取得出来るかのように書いてしまいましたが、これは大きな誤りです。
問題の記事はこちら。訂正済みです。
【制作実習】Node.jsでゲームサーバーを構築する。その3
正しくは、javascriptの作法でちゃんとクラス定義(に近い実装)をして、なおかつNode.jsの作法にのっとってインスタンス化する必要がありました。
【javascript + Node.js の作法によるクラス定義(メンバ変数、メンバメソッド)】
//javascriptの作法によるクラス定義(ファイル名Game.js) var Game = function(param1, param2) { //メンバ変数(this.をつける) this.member1 = param1; //メンバ変数(this.をつける) this.member2 = param2; //メンバメソッド(this.をつける) this.run = function() { //自分自身のメンバのアクセスはthis.をつける this.update(this.member1); this.render(); } //メンバメソッド(this.をつける) this.update = function(param) { //メソッドパラメータはthis.をつけない console.log(param); //処理は省略 } //メンバメソッド(this.をつける) this.render = function() { //処理は省略 } } //Node.js の作法によるクラス定義のエクスポート module.exports = Game;
この定義に対して、Node.jsでインスタンスを生成するのは下記の要領となる。
//クラス定義を読込む var Game = require('./Game.js'); //あとは通常通り new すればよい var game1 = new Game('a', 'b'); //上とは異なるインスタンス var game2 = new Game('x', 'y');
以上