javascript - 如何在 Nodejs 中使用全局对象获取常量变量?

标签 javascript node.js global-variables dynamic-programming

我想用 global object 得到一个常量变量动态使用它,但 global.myconstant 不起作用,但 global.myvar 起作用。

λ node
> const myconstant = true
undefined
> global.myconstant
undefined
> var myvar = true
undefined
> global.myvar
true
> global.const
undefined

我想做的:

const myconstant = () => { console.log("ok const"); };
var myvariable = () => { console.log("ok var"); };

const watchlist = {
  myconstant: "file1.html",
  myvariable: "file2.html"
};

Object.keys(watchlist).forEach((taskName) => {
  try {
    global[taskName](); //doesn't work with const
  } catch (e) {
    console.error("error", taskName);
  }
});

实际输出:

error myconstant
ok var

想要的输出:

ok const
ok var

现场演示:https://repl.it/repls/SunnyScholarlyPasswords

如何使用字符串获取常量变量? 没有用 var 替换 const

最佳答案

只有用 var 声明的变量才会隐式分配给全局对象。如果要创建不可重新分配的属性,则应改用 Object.defineProperty。例如,在浏览器中,引用 window 而不是 global:

Object.defineProperty(
  window,
  'myconstant',
  {
    value: () => { console.log("ok const"); },
    configurable: false
  }
);
var myvariable = () => { console.log("ok var"); };

const watchlist = {
  myconstant: "file1.html",
  myvariable: "file2.html"
};

Object.keys(watchlist).forEach((taskName) => {
  try {
    window[taskName]();
  } catch (e) {
    console.error("error", taskName);
  }
});

// Won't reassign, and will throw an error in strict mode:
window.myconstant = 'foo';
console.log(typeof window.myconstant);

configurable: false 是关键,虽然它是可选的 - 它默认为 false。无法修改或删除不可配置的属性。

关于javascript - 如何在 Nodejs 中使用全局对象获取常量变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54051621/

相关文章:

javascript - 他们的任何带有幻灯片的响应式灯箱是否具有适当的滑动?

javascript - 如何在事件监听器中使用 <option> 的值来触发函数

node.js - 使用expressjs multer时xhr上传进度

node.js - npm 安装 https

java - 如何在此嵌入式程序中不使用全局变量?

javascript - 从 href 中的数据将内容加载到 div

javascript - 使用 JavaScript 和 CSS clip-path 属性绘制多边形

javascript - node.js如何组装文件上传?

javascript - 在函数内部定义全局变量

php - 使所有变量成为全局变量,PHP