RequireJs和全局类

时间:2014-02-04 09:22:51

标签: variables requirejs global

在我的页面中,我使用requireJs

启动课程
define('MyClass', [], function() {
    var MyClass = new Class({
        initialize: function() {
            ...
        }   
    });

    return MyClass;
});


require(['MyClass'], function(MyClass) {
    var myClass = new MyClass();
});

问题是我想在其他一些js代码中访问myClass变量,但myClass变量不是全局的。如何将myClass变量公开给其他js代码?

2 个答案:

答案 0 :(得分:1)

requireJS的一点是避免全局变量。如果只需要MyClass的一个实例,则模块可以返回实例而不是类。

define('MyClass', [], function() {
    var MyClass = new Class({
        initialize: function() {
            ...
        }   
    });

    return new MyClass();
});

答案 1 :(得分:1)

通常,您不应在全局空间中泄漏变量。

如果您正在谈论的其他代码是AMD风格的模块(RequireJS模块通常是AMD风格的模块),那么您应该导出myClass实例,就像导出MyClass类一样你的问题。你已经知道该怎么做了。

如果必须与代码无法与RequireJS配合使用,您应该只需删除var关键字即可泄露数据:

require(['MyClass'], function(MyClass) {
    myClass = new MyClass();
});

这应该myClass泄漏到全球空间。

如果您的代码嵌入在函数中,它可能会触及在更高范围内定义的变量,但您可以这样做:

function () {
    // This function has a local `myClass`. You could rewrite it or...
    var myClass = new Whatever();

    ...
    require(['MyClass'], function(MyClass) {
        // ... you can leak your data like this.
       window.myClass = new MyClass();
    });
}