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

时间:2018-01-08 18:14:50

标签: javascript ecmascript-6 es6-class

我知道(或者我认为我知道)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

我无法在Test类中创建另一个函数。我刚刚得到了这个实例。

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

3 个答案:

答案 0 :(得分:1)

$('#advent').click(function () {
    $("#arrow", this).toggleClass("fa-minus-circle");
    $('#expand').slideToggle();
});
app.running可以是全局访问的交换机。 run方法可以是测试对象的属性,因此可以复制和重用。

答案 1 :(得分:1)

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

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

        // option B
        return true;

        // or use both A and B
    }
}

运行函数将被覆盖,因此它取决于它是否是适当的或有效的解决方案。

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

答案 2 :(得分:1)

  

我知道JavaScript中的范围如何工作所以我认为这是不可能的

确实是的。这就是阻止范围意味着:该变量仅对该块中的代码可用,即在{ … }方法的run大括号之间。

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

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

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