[英]How to get all variables in the local scope of a process nodejs
你如何从本地范围获得所有变量? 例如 :
x=1;
class testit {
constructor (){
this.a='two';
}
}
var t1=new testit;
var missing = new testit;
var missing2 = 1;
var vars = Object.keys(global);
console.log(vars)
将打印x,但没有其他定义的变量。
为了允许使用这种类型的概念,它允许程序跟踪所有类实例而不允许全局添加中的人为错误,我们现在继承一个基类:
"use strict";
global.childClasses = [];
class BaseClass {
constructor(){
global.childClasses.push(this);
}
static print(){
console.log(global.childClasses);
}
}
module.exports = {
BaseClass
}
我们现在可以通过调用基类的静态方法列出所有实例,就像在这个testExample.js文件列表中一样:
"use strict";
let BaseClass = require('./baseClass').BaseClass;
class Test1 extends BaseClass {}
let test1 = new Test1;
class Test2 extends BaseClass {}
let test2 = new Test2;
BaseClass.print();
哪个输出:
$ node ./testExample.js
[ Test1 {}, Test2 {} ]
你如何从本地范围获得所有变量?
你没有。 Javascript没有任何方法来迭代在本地范围内声明的变量。 您只能迭代全局范围内的变量(隐式或有意)。
通常的解决方法是使您的变量成为本地对象的属性,然后您可以随时使用Object.keys()
for/in
来迭代该本地对象的属性。
在您的示例中, x
未在任何范围内显式声明(如果您未在严格模式下运行),则Javascript使其成为全局。 如果您在严格模式下运行,则分配给未声明的变量是错误的(因为这通常是一件坏事)。
其他声明的变量位于节点模块作用域中 ,它是本地函数作用域(每个节点模块都包含在一个函数中),并且该函数由加载器调用,因此每个模块都有自己的私有函数作用域。
将打印x,但没有其他定义的变量。
因为只有x
是全局的。 其他声明的变量是模块包装函数的本地变量,加载器会自动将所有节点模块放入其中。 在node.js中,您不能将代码放在实际的top / global范围中。 您的代码位于节点为您的模块创建的函数包装器中。
当你没有用let
, var
或const
声明变量时,那个变量在NodeJS环境中被认为是global
,但是当我们尝试运行代码时这会给出错误。 因此,将变量或方法声明为global
的更好方法是将当时指定为global
对象的属性。 像这样的东西:
global.x=1;
class testit {
constructor (){
this.a='two';
}
}
global.t1=new testit();
global.missing = new testit();
global.missing2 = 1;
console.log(Object.keys(global));
有了它,您将获得global
打印的所有键,变量名称为t1
, missing
等等。 此外,要创建类的实例,您需要指定括号()
如new testit()
而不是new testit
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.