最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

将NodeJS模块范围变量作为对象进行访问

IT培训 admin 3浏览 0评论

将NodeJS模块范围变量作为对象进行访问

我可以访问节点全局变量作为GLOBAL对象的属性。

我可以以类似的方式访问模块范围变量吗?

EG

var fns_x = function(){/*...*/};
var fns_y = function(){/*...*/};

function aFn(param){
   /* moduleScope = something that allows me to access module scope variables */
   if(moduleScope['fns_' + param]){
      moduleScope['fns_' + param]();
   }
}

/*...*/
module.exports = /*...*/

或者最好将这些变量包装在对象中?例如

var fns = {
   x: x = function(){/*...*/},
   y: x = function(){/*...*/}
}

function aFn(param){
   if(fns[param]){
      fns[param]();
   }
}

/*...*/
module.exports = /*...*/
回答如下:

简短的回答是否定的。

虽然在ECMAScript规范中,变量声明在模块的环境记录设置中可用,但是指定不能以编程方式访问它。

ECMAScript程序不可能直接访问或操纵这些值 [spec]

一种解决方法是将私有变量维护为函数的容器并公开查找函数。

var registry = {
   x: function () {},
   y: function () {},
};


module.exports = function (prop) { 
  return registry[prop]; 
};

请注意,模块代码的静态分析以这种方式丢失。

您还可以绑定到全局环境,但是存在覆盖模块全局范围中设置的重要变量的风险。

var that = this;

that.x = function () {};
that.y = function () {};

 module.exports = function (prop) { 
    return that[prop]; 
 };

将NodeJS模块范围变量作为对象进行访问

我可以访问节点全局变量作为GLOBAL对象的属性。

我可以以类似的方式访问模块范围变量吗?

EG

var fns_x = function(){/*...*/};
var fns_y = function(){/*...*/};

function aFn(param){
   /* moduleScope = something that allows me to access module scope variables */
   if(moduleScope['fns_' + param]){
      moduleScope['fns_' + param]();
   }
}

/*...*/
module.exports = /*...*/

或者最好将这些变量包装在对象中?例如

var fns = {
   x: x = function(){/*...*/},
   y: x = function(){/*...*/}
}

function aFn(param){
   if(fns[param]){
      fns[param]();
   }
}

/*...*/
module.exports = /*...*/
回答如下:

简短的回答是否定的。

虽然在ECMAScript规范中,变量声明在模块的环境记录设置中可用,但是指定不能以编程方式访问它。

ECMAScript程序不可能直接访问或操纵这些值 [spec]

一种解决方法是将私有变量维护为函数的容器并公开查找函数。

var registry = {
   x: function () {},
   y: function () {},
};


module.exports = function (prop) { 
  return registry[prop]; 
};

请注意,模块代码的静态分析以这种方式丢失。

您还可以绑定到全局环境,但是存在覆盖模块全局范围中设置的重要变量的风险。

var that = this;

that.x = function () {};
that.y = function () {};

 module.exports = function (prop) { 
    return that[prop]; 
 };
发布评论

评论列表 (0)

  1. 暂无评论