在 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
方法,例如通过使它成为对象 属性 而不是局部变量。
我知道(或者我想我知道)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
方法,例如通过使它成为对象 属性 而不是局部变量。