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 に答える