0

在 node.js 模块中,变量声明在模块内保持私有:

var a = 'x';

比方说,我想以这种方式声明一些变量。我不能使用下面的代码,因为像这样变量变得非常全局并且在其他模块中也可见:

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;
[...]
4

1 回答 1

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);
于 2015-09-15T18:10:48.277 回答