簡體   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