将属性添加到节点模块中的顶级对象

时间:2015-09-15 17:23:39

标签: javascript node.js gl-matrix

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

1 个答案:

答案 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);