是否有可能导出构造函数和一些正常的function从同一个模块节点js?

我的应用程序结构

| my-application | -- app.js | -- node_modules | -- public | -- models | -- users.js | -- routes | -- index.js | -- views | -- index.ejs 

users.js

 function User(name){ this.name = name; } User.prototype.getName = function () { return this.name; }; exports.checkName = function (name) { if(name === 'johnSnow'){ return true; } return false; }; module.exports = User; 

我试试这个:

index.js

 var user = require('../models/users'); if( user.checkName('dinar') === true ){ var User = new user('name'); console.log(User.getName()); } 

TypeError: user.checkName is not a function

是否有可能使用相同模块的函数和构造函数?

有没有办法做到这一点?

我是节点js中的新手。

提前致谢。

是的,通过将普通函数作为“静态”方法放在构造函数本身上是可能的。 在你的尝试中,你用User覆盖了exports对象,所以checkName丢失了。 相反,做

 function User(name){ this.name = name; } User.prototype.getName = function () { return this.name; }; User.checkName = function (name) { /* ^^^^ */ return name === 'johnSnow'; }; module.exports = User; 

或者,你也可以写

 module.exports = User; module.exports.checkName = function (name) { return name === 'johnSnow'; }; 

对于这种types的实现,你通常会这样做:

user.js中

 function User(name){ this.name = name; } User.prototype.getName = function () { return this.name; }; module.exports = { User: User, checkName: function(name) { return (name === 'johnSnow'); } }; 

然后在index.js中

 var users = require('../models/users'); if (users.checkName('dinar')) { var user = new users.User('name'); console.log(user.getName()); }