你将如何将函数构造函数对象方法与原型一起封装在使用exports或module.exports的单个模块中

我想用这个代码做一个“网格”模块,我已经尝试了不同的方式使用出口或module.exports在其他文件中使用它,但没有奏效。 我想有一个require('./ grid.js')并使用这个对象,在另一个文件中运行。

function Vector(x, y) { this.x = x; this.y = y; } Vector.prototype.plus = function(other) { return new Vector(this.x + other.x, this.y + other.y); }; function Grid(width, height) { this.space = new Array(width * height); this.width = width; this.height = height; } Grid.prototype.isInside = function(vector) { return vector.x >= 0 && vector.x < this.width && vector.y >= 0 && vector.y < this.height; }; Grid.prototype.get = function(vector) { return this.space[vector.x + this.width * vector.y]; }; Grid.prototype.set = function(vector, value) { this.space[vector.x + this.width * vector.y] = value; }; var directions = { "n": new Vector( 0, -1), "ne": new Vector( 1, -1), "e": new Vector( 1, 0), "se": new Vector( 1, 1), "s": new Vector( 0, 1), "sw": new Vector(-1, 1), "w": new Vector(-1, 0), "nw": new Vector(-1, -1) }; function randomElement(array) { return array[Math.floor(Math.random() * array.length)]; } var directionNames = "n ne e se s sw w nw".split(" "); 

编辑答案:我做了一个更容易的例子基于亚历山大M

 // ================== lib.js function User(n, p) { this.n = n; this.p = p; } User.prototype.user = function() { console.log("user: " + this.n + ", pass: " + this.p); }; function Client(n, p, m) { User.call(this, n, p); this.m = m; } Client.prototype = new User(); Client.prototype.full = function() { console.log(this.m); }; module.exports = { User, Client }; 

 // ============= FILE.JS var mod = require('./lib.js'); var john = new mod.Client("john", "mskjqh", "john@gmail.com"); john.user(); john.full(); console.log(john); // input // user: john, pass: mskjqh // john@gmail.com // User { n: 'john', p: 'mskjqh', m: 'john@gmail.com' } 

据我所知,你想出口的一切,对吧?

 function Vector(x, y) { ... } function Grid(width, height){ ... } module.exports = { Vector: Vector, Grid : Grid, directionNames : directionNames, ... }; 

如果您使用的是node.js 4+,则可以使用简短的ES6语法:

 module.exports = { Vector, Grid, directionNames, ... }; 

然后,在另一个文件中,你会有

 var Vector = require('./path/to/grid.js').Vector; 

要么

 var grid = require('./path/to/grid.js'); var Vector = grid.Vector; 

你也可能会发现这个问题很有用。