在 class 个实例中获取块作用域变量

get block-scoped variable in class instance

我知道(或者我想我知道)JavaScript 中的作用域是如何工作的,所以我想这不可能但是:有没有一种方法可以访问 [=] 中的块(函数)作用域变量18=]实例?

class Test {
  run() {
    const running = true;
  }
}

const test = new Test();
test.run();

console.log(?) -> here I would like to get info that `running` variable was created

我无法在测试 class 中创建另一个函数。我刚拿到实例。

仅供参考:我尝试解决的问题范围更广,与第 3 方库有关。

var app = { running: true }; 
var Test = { run: function() { return app.running; } }; 
var testInstance = new Test(); 
var testRunMethod = testInstance.run; testRunMethod(); 

app.running可以全局访问开关。 运行 方法可以是测试对象的 属性,因此可以复制和重用。

除非您更改函数 run,否则您无法访问其中的 属性。如果您正在使用 3rd 方代码,这很困难,但一个可能的解决方案是通过扩展 class 来覆盖该方法(您需要非常确定 3rd 方代码不会改变那么多):

class ConcreteTest extends Test {
    run() { 
        // option A
        this.running = true

        // option B
        return true;

        // or use both A and B
    }
}

运行 函数将被覆盖,因此这取决于这是一个合适的解决方案还是可行的解决方案。

您的图书馆不提供任何 API 或解决方法来解决您的问题吗?

I know how scopes in JavaScript work so I suppose it can be impossible

确实如此。这就是 块范围 的意思:该变量仅可用于该块中的代码,即在 run 方法的 { … } 大括号之间。

test.run();
console.log(?) // here I would like to get info that `running` variable was created

不,那不可能。请注意 running 变量在 .run() 调用结束后甚至不再存在。

使 true 值对外部可用的唯一方法是更改​​ run 方法,例如通过使它成为对象 属性 而不是局部变量。