在node.js模块中,变量声明在模块内保持私有:
var a =' x&#39 ;;
让我们说,我想以这种方式声明一些变量。我不能使用以下代码,因为这样变量在其他模块中变得非常全局和可见:
var xs = ['a', 'b', 'c', 'd'];
for (key in xs) {
var value = xs[key];
global[value] = 'x';
}
有没有办法只为模块执行此操作?我需要这个,因为我需要一个库(' gl-matrix'),它本身有几个我需要在模块中轻松访问的子对象。我想避免:
var gl_matrix = require('gl-matrix');
var vec2 = gl_matrix.vec2;
var vec3 = gl_matrix.vec3;
var mat3 = gl_matrix.mat3;
[...]
答案 0 :(得分:0)
不完全确定为什么要以这种方式声明变量。但是,如果这是你正在采取的方法,这应该有用......
var declareObjKeyVal = function(arr, val) {
var obj = {};
for (key in arr) {
obj[arr[key]] = val;
}
return obj;
}
var xs = ['a', 'b', 'c', 'd'];
var xs_val = 'x';
var new_vars = declareVars(xs, xs_val);
如果你想制作gl_matrix对象的完整副本,你可以这样做......
var copyObj = function(obj) {
var cobj = {};
for (key in obj) {
cobj[key] = obj[key];
}
return cobj;
}
var gl_matrix_copy = copyObj(gl_matrix);
或者,如果您正在寻找特定的值子集,则可以添加条件...
var copyObjKeyVals = function(obj, keys) {
var cobj = {};
for (key in obj) {
if(keys.indexOf(key) > -1){
cobj[key] = obj[key];
}
}
return cobj;
}
var gl_keys = ['vec2', 'vec3', 'mat3'];
var gl_matrix_copy = copyObjKeyVals(gl_matrix);