繁体   English   中英

如何获取进程nodejs的本地范围内的所有变量

[英]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范围中。 您的代码位于节点为您的模块创建的函数包装器中。

当你没有用letvarconst声明变量时,那个变量在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打印的所有键,变量名称为t1missing等等。 此外,要创建类的实例,您需要指定括号()new testit()而不是new testit

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM