获取类实例中的块范围的变量



我知道(或者我认为我知道(JavaScript 中的作用域是如何工作的,所以我想这是不可能的,但是:有没有办法在类实例中获取块(函数(作用域变量?

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

我无法在测试类中创建另一个函数。我刚刚有了实例。

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

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

class ConcreteTest extends Test {
    run() { 
        // option A
        this.running = true
        // option B
        return true;
        // or use both A and B
    }
}

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

您的库是否提供任何 API 或解决方法来解决您的问题?

我知道JavaScript中的作用域是如何工作的,所以我想这是不可能的

确实是的。这就是块作用域的含义:变量仅适用于该块中的代码,即在run方法的{ … }大括号之间。

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

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

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

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

RUN 方法可以是测试对象的属性,因此可以复制和重用。

最新更新