2013-01-03 12 views
6

私はnode.js内の他のjsファイルのインクルードを整理しようとしています。ノードjsとnewが必要な場合

私はrequire関数と他の選択肢についてすべてを読んでおり、require関数を使うことに決めました(コードはブラウザではなくnode.jsでのみ使用されるため)。

私のコードでは、後でインスタンスを作成したい「オブジェクト」を作成するためにプロトタイプを使用しています。

それは私が(それがvehicle.js呼び出すことができます)、次のようなコードを書いてきた仕事を得るために:

var util = require('util'); 
var EventEmitter = require('events').EventEmitter; 

module.exports = Vehicle; 

util.inherits(Vehicle, EventEmitter); 

function Vehicle(options) { 
    EventEmitter.call(this); 
    options = options || {}; 
    ... 
} 

Vehicle.prototype._doStartEvent = function(data) { 
    this.emit('start', data); 
}; 

Vehicle.prototype.testRun = function() { 
    this._doStartEvent(); 
}; 

その後、私のメインのjs(server.jsそれを呼び出すことができます)には、私がしています次のようになります。

var test = exports; 
exports.Vehicle = require('./vehicle.js'); 

var remoteVehicle = new test.Vehicle({address: "192.168.1.3"}); 

remoteVehicle.on('start', function(d) {console.log('started');}); 

remoteVehicle.testRun(); 

これですべて正常に動作しますが、何が起こっているのかよく分かりません。

私の主な関心事は、var test = exports;を使用し、次にexports.Vehicle = require(...)です。

new Vehicleなどを使用することを目標として、var vehicle = require(...).Vehiclevar vehicle = require(...)のような処理を試みましたが、動作させることができませんでした。

私は輸出を強制的に使用していますか?その場合はなぜですか?

私はAR Droneプロジェクトを例として使用していますが、上記のコードはモジュールが内部的にどのように処理したかに基づいています。 Client.jsおよびindex.jsを参照してください。

+0

このマスタリングノードのeBookへのパラメータとして使用することは良いです:http://visionmedia.github.com/masteringnode/book。 html – Alex

+0

@LeonidBeschastnyこれは重複していますか?この質問が最初に尋ねられました(2013年7月11日に尋ねられました)。もしあなたが彼らが重複していると思うなら、もう1つの質問は重複したものであり、このものではありません。 – Metalskin

+0

@ Metalskin申し訳ありませんが、私はタイトルに混乱していました。私はあなたの質問をより慎重に再レッドし、私はそれが重複であると誤解されたと思う。 –

答えて

6

結果requireは、あなたのケースで機能するエクスポートオブジェクトへの参照です。ただ、クラス(または他の)と同じ名前の変数に割り当てるとnew

var Vehicle = require('./vehicle.js'); 

var remoteVehicle = new Vehicle({address: "192.168.1.3"}); 

remoteVehicle.on('start', function(d) {console.log('started');}); 

remoteVehicle.testRun(); 
+0

ありがとうアンドレイ、それは働いた。私があなたの提案したことを試したと思ったので、私がやっていたことがうまくいかなかったことを今は確信しています。私は混乱していて、「var Vehicle = require( './ vehicle.js')。Vehicle;」をやっていると思う。 – Metalskin

関連する問題