Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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
Javascript js:如何从外部访问内部定义的类(可访问性问题)_Javascript_Class_Requirejs_Require - Fatal编程技术网

Javascript js:如何从外部访问内部定义的类(可访问性问题)

Javascript js:如何从外部访问内部定义的类(可访问性问题),javascript,class,requirejs,require,Javascript,Class,Requirejs,Require,这个问题困扰了我一段时间。 我试图从外部调用一个类require(可访问性问题),我的代码如下所示 require(['foo'], (foo) => { class Bar { hello() { return "hello"; } } }); bar = new Bar(); //uncaught ReferenceError: Chart is not de

这个问题困扰了我一段时间。 我试图从外部调用一个类require(可访问性问题),我的代码如下所示

require(['foo'],
    (foo) => {
        class Bar {
            hello() {
                return "hello";
            }
        }
    });
bar = new Bar();
//uncaught ReferenceError: Chart is not defined
我找到了一个解决方法,这是通过使用window.Bar=class-Bar来完成的

require(['foo'],
    (foo) => {
        window.Bar = class Bar {
            hello() {
                return "hello";
            }
        }
    });
bar = new Bar();
//OK
然而,当使用巴别塔转换时,这不是一个方便的解决方案

您知道其他更正确的方法来导出/定义这个类,以便从更高级别调用它吗


Thanx提前

你不会的。相反,您应该在回调中编写完整的模块代码:

require(['foo'], foo => {
    class Bar {
        hello() {
            return "hello";
        }
    }
    const bar = new Bar();
    // ...rest of code here...
});
这是编写样式模块的正常方式。您不需要在脚本的顶层编写任何内容,所有内容都在回调中,这样Require就可以在适当的时候调用它

导出/定义此类的正确方法

当您想要“导出”东西时,您要做的是创建一个模块。为此,您可以使用
define
调用,而不是
require
。然后,您可以返回您想要导出的内容。例如:

define(['foo'], (foo) => {
  class Bar {
    hello() {
      return "hello";
    }
  };

  return Bar;
});
如果此代码位于名为
bar.js
的文件中,并且您已正确设置了RequireJS配置,以便RequireJS可以找到它,那么您可以从其他地方执行
require([“bar”]、function(bar){…})
,或者其他模块可以使用它:

define(["bar"], function (Bar) {
  const bar = new Bar();
  // do more stuff...
});
要求
定义
加载依赖项并使用已解析的依赖项执行回调,但只有
定义
实际定义了模块。除非您在模块中,否则没有使用RequireJS“导出”的概念,这意味着您使用
define