Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables RequireJs与全局类_Variables_Requirejs_Global - Fatal编程技术网

Variables RequireJs与全局类

Variables RequireJs与全局类,variables,requirejs,global,Variables,Requirejs,Global,在我的页面中,我使用requireJs初始化了一个类 define('MyClass', [], function() { var MyClass = new Class({ initialize: function() { ... } }); return MyClass; }); require(['MyClass'], function(MyClass) { var myClass = ne

在我的页面中,我使用requireJs初始化了一个类

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

    return MyClass;
});


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

问题是我想在其他一些js代码中访问myClass变量,但myClass变量不是全局变量。向其他js代码公开myClass变量的正确方法是什么?

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

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

    return new MyClass();
});

一般来说,不应在全局空间中泄漏变量。

如果您正在谈论的另一个代码是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();
    });
}