簡體   English   中英

向節點模塊中的頂級對象添加屬性

[英]Adding a Property to the Top-level Object in a Node Module

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

不太確定為什么要這樣聲明變量。 但是,如果您采用的是這種方法,則應該可以使用...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM