我有以下代码在本地函数中运行:
var instance = 'vertical' + view;
//make this variable global
window.instance = instance;
instance = new IScroll( '.' + $(contentAdded).find('.vertical').attr('class'), {
...
这个函数通过应用程序运行几次,所以我可以有多个IScroll插件实例。但是我需要这些'实例'可以全局访问,但因为它们是动态的...我该如何设置它们?由于上面的代码只是创建一个名为instance的全局变量,而不是创建一个动态变量的名称。
试试这个:
window.'vertical' + view = 'vertical' + view;
不起作用,因为它不喜欢字符串......并且正在执行:
var name = 'vertical' + view;
window.name = instance;
是同一个问题,只创建一个名为name的变量...
我该怎么做?
答案 0 :(得分:1)
我认为你正在寻找这个:
var name = 'vertical' + view;
window[name] = instance;
说,view
为"FooBar"
,然后name
为'verticalFooBar'
。
window[name]
会产生window['verticalFooBar']
因此,window.verticalFooBar
将引用该实例。
答案 1 :(得分:1)
执行window['vertical' + view] = ...
P.S。请在MDN上阅读Property Accessors以了解更多信息
答案 2 :(得分:0)
我会为每个视图生成factory class
个生成实例。
通过这种方式,您不会污染全局命名空间,并且可以将实例很好地存储在工厂类中。
通过get
方法从工厂类中获取实例,可以全局访问这些实例。
示例/虚拟实现:
var IScrollFactory = {
instances: {},
/** creates an instance. */
create: function(view, ...) {
var instance = new IScroll( '.' + $(contentAdded).find('.vertical').attr('class'), {
...
};
this.instances[view] = instance;
return instance;
},
/** returns an already created instance by the view. */
get: function(view) {
return this.instances[view];
}
}
var newInstance = IScrollFactory.create("view1", ...);
var getFromFactoryByView = IScrollFactory.get("view1");