当前位置:  开发笔记 > 编程语言 > 正文

动态命名的局部变量,用于加载模块

如何解决《动态命名的局部变量,用于加载模块》经验,为你挑选了1个好方法。

有没有办法var x = 1用动态名称设置局部变量(即),就像我们可以用于对象属性(即o["prefix:" + x])?

例如,我有一个CommonJS模块,并将多个组件加载到单独的局部变量中,以方便访问:

var module = require("module") // returns object like {a, b, c}
var a = module.a;
var b = module.b;
var c = module.c;

我希望能够在一行中完成此操作 - 为每个模块的属性设置局部变量.

一种方法是这样的:

Object.assign(local_variable_object, require("module"));

where local_variable_object是一个以key作为变量名的对象.如果我只想导入部分模块,我可以对结果应用过滤功能require().

我意识到我可能会使用eval,但这会不必要地杀死V8优化编译器,因为它应该在优化时知道这些变量是什么以及它们是否有效.



1> lleaff..:

在ES5中,除非eval在全球范围之外,否则无法可靠地执行此操作window[varname].

ES2015模式匹配

ES6 为语言添加了模式匹配,允许您进行解构分配.

例:

var { a, b, c } = require("module");

等同于你的初始例子(以及Babel的ES2015-destructuring插件如何将其转换为ES5):

var module = require("module");
var a = module.a;
var b = module.b;
var c = module.c;
原生ES5解决方法

ES5有一个解决方法,就是在函数中定义自己的"局部作用域"对象,然后像普通对象一样使用它.

例:

function () {
    "use strict";
    var l = {};
    var a = "someletter";
    l[a] = "A";
    console.log(l.someletter);
}

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有