相关疑难解决方法(0)

在窗口全局中无法访问Javascript ES6类定义

我遇到了一个有趣的问题,至少我觉得它很有趣,而且有点烦人.我有一节课,对于这个问题,我会保持非常简单......

class Foo {
    static pageChange() {
        console.log('The page changed');
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以通过Foo.pageChange()访问它没问题,一切都按预期工作.当我尝试动态访问它时,困难的部分和有趣的位进来.我有一个单独的对象监视事件并处理根据需要调度它们.这与Google可视化库有关,我在其中有一个表,并且表中包含与之关联的事件.我有一个对象负责从PHP输出创建所有这些.这是一个系统的一点,简单的解释你可以在PHP中做这样的事情...

GoogleVisLibrary::renderChart(
    array(
        'chartType' => 'table',
        'chartData' => $this->chartData,
        'chartOptions' => $this-chartOptions,
        'events' => array(
             'sort' => 'Foo.pageChange'
        )
);
Run Code Online (Sandbox Code Playgroud)

现在,这将创建表和所有好东西.问题是在javascript中访问Foo类中的静态方法.在创建Foo之前​​我所拥有的就是这个.

var Foo = {
    pageChange: function() {
         console.log('page changed');
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的事件库处理程序thingy它会看起来像这样..

for(var i = 0, l = events.length; i < l; i++) {
    window[events.className][events.fnName].apply();
}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,因为Foo可以通过窗口['Foo']访问,但是当您使用第一个代码片段中显示的类定义时,您无法再从超级全局窗口访问它,它只输出'undefined'.

那么,有没有办法通过动态引用来访问类中的静态方法,就像通过窗口全局的Foo对象一样?

我希望这是有道理的,我正在解释它.如果没有任何意义,请随意提问,我会尽力解释.提前感谢您提供任何帮助.

javascript class ecmascript-6

17
推荐指数
1
解决办法
7118
查看次数

标签 统计

class ×1

ecmascript-6 ×1

javascript ×1