gpt4 book ai didi

javascript - Nodejs 中从模块导出变量的优雅方法

转载 作者:行者123 更新时间:2023-12-03 08:28:53 24 4
gpt4 key购买 nike

我想在使用 Node.js 中的一个模块的参数初始化后导出一个变量。

现在,我有三个选择。

选项 1:直接导出

// 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;
}

变量ab可以在模块外使用。

// 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:通过函数原型(prototype)中的一个 get 方法。

var Test = function (a, b){
this._a_ = a;
this._b_ = b;
};

Test.prototype.getA = function()
{
return this._a_;
}

exports.mod = Test;

这里我有两个问题:

  • 哪一种方法更优雅?
  • 如果以上三种方案都不好,还有更好的方法吗?

最佳答案

根据对您问题的评论,一种可能的方法如下。您的主要问题是您实际上没有隐藏数据,从而让用户可以修改它们。

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方法等来完成。请记住,有很多可能的解决方案,但没有一个是正确的,但几乎所有解决方案都是有效的。

据我所知,无论如何,您上面发布的那些都存在一些小问题,当然,尽管它们都工作正常。

关于javascript - Nodejs 中从模块导出变量的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33429957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com