在JavaScript中将动态局部变量添加到全局变量

时间:2014-07-02 11:32:46

标签: javascript

我有以下代码在本地函数中运行:

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的变量...

我该怎么做?

3 个答案:

答案 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");