6

我一直在尝试整理 node.js 中其他 js 文件的包含。

我已经阅读了有关 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;then的使用exports.Vehicle = require(...)

我试着做一些类似var vehicle = require(...).Vehicleandvar vehicle = require(...)的事情,目的是使用new Vehicle或类似的东西,但我无法让它工作。

我是否被迫使用出口,如果是,为什么?

请注意,我一直以 AR Drone 项目为例,上面的代码是基于他们在内部完成模块的方式。请参阅Client.jsindex.js

4

1 回答 1

7

结果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();
于 2013-01-03T09:06:48.483 回答