我希望在Node.js
中的一个模块的参数初始化后导出一个变量。
现在,我有三种选择。
选项1 :直接与exports
// moduletest.js
exports.init = function(v, w) {
// actually, the value of a and b could be initialized by other functions.
// here is one example, simply assign them with v and w just for test
exports.a = v;
exports.b = w;
}
变量a
和b
可以在模块外使用。
// app.js
require('./moduletest').init(3, 1);
var ff = require('./moduletest');
console.log(ff.a);
console.log(ff.b);
选项2 :在对象中使用var get
方法。
var MyObject = {
init: function(a, b) {
this._a_ = a;
this._b_ = b;
},
getA: function () {
return this._a_;
},
};
exports.mod = {
valA: MyObject.getA,
init: MyObject.init
}
可以通过_a_
方法访问变量getA
。
选项3 :通过函数原型中的一个get
方法。
var Test = function (a, b){
this._a_ = a;
this._b_ = b;
};
Test.prototype.getA = function()
{
return this._a_;
}
exports.mod = Test;
这里有两个问题:
答案 0 :(得分:1)
根据您对问题的评论,可能的方法如下。你的主要问题是你实际上没有隐藏数据,因此让用户修改它们。
module.exports = function (_a, _b) {
return function() {
var obj = { };
Object.defineProperty(obj, 'a', {
get: function () { return _a; }
});
Object.defineProperty(obj, 'b', {
get: function () { return _b; }
});
};
}
您可以按照以下方式使用它:
var factory = require('file_above')(your_a, your_b);
// code
var instance = factory();
// you cannot modify a or b on instance!!
使用函数的bind
方法等可以完成类似的操作。请记住,有很多可能的解决方案,其中没有一个是正确的解决方案,而几乎所有解决方案都是有效的。
据我所知,无论如何,你上面发布的那些都有一些小问题,当然所有这些问题都很好。