我的应用结构:
| 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的新手。
先谢谢。
答案 0 :(得分:2)
对于这种类型的实现,您通常会这样做:
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());
}
答案 1 :(得分:0)
是的,通过将普通函数作为“静态”方法放在构造函数本身上是可能的。在您的尝试中,您使用exports
覆盖了User
对象,因此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';
};
答案 2 :(得分:0)
很有可能并且会这样做。对我来说,我总是将属于对象的函数写为嵌套函数,我发现它在概念上更容易,也更符合逻辑。您将看到addSquares是一个辅助方法,它不属于由构造函数构成的Square对象。
<强> FILEA:强>
var exports = module.exports();
exports.Square = Square;
exports.addSquares = addSquares;
function Square(width, height){
this.width = width;
this.height = height;
this.area = function(){
return this.width * this.height;
}
}
function addSquares(sq1, sq2){
return sq1.getArea() + sq2.getArea();
}
<强> FILEB 强>
var Square = require('fileA');
var mySquare = new Square.Square(10,50);
var yourSquare = new Square.Square(50,50);
var area2 = Square.addSquares(mySquare, yourSquare);