我遇到了一个有趣的问题,至少我觉得它很有趣,而且有点烦人.我有一节课,对于这个问题,我会保持非常简单......
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对象一样?
我希望这是有道理的,我正在解释它.如果没有任何意义,请随意提问,我会尽力解释.提前感谢您提供任何帮助.