javascript - 将脚本动态注入(inject)文档时无法实例化类

标签 javascript jquery es6-class

我正在试验 javascript 中可用的类,并设置了一个简单的测试用例,如下所示:

<script src="myclass.js></script>

<script>
    var test = new MyClass();
</script>

myclass.js 包含以下内容:

class MyClass {
    constructor() {
    }
}

这按预期工作。

但是,如果我使用 jQuery.getScript() 函数动态加载“myclass.js”,浏览器会返回以下错误:

Uncaught ReferenceError :未定义 MyClass

我仔细检查过的是:

实例化类的代码放在 getScript 函数的成功回调中

而且脚本实际上正在加载和执行(使用简单的控制台日志)

但是我似乎对此一无所知。如果包含类的文件是使用 jQuery.getScript 函数从 javascript 文件加载的,是否有任何原因无法实例化类?

这是不起作用的代码:

<script>
    $(document).ready(function() {
        $.getScript('myclass.js', function () {
            var test = new MyClass();
        });
    });
</script>

在 Chrome 版本 71.0.3578.98(64 位)上测试

最佳答案

看看 this question and its answers 以及 documentation 这样说成功回调在加载后运行但不一定在执行脚本后运行。

总而言之,通过附加 then(或 done)处理程序来运行您的代码可能就足够了:

$.getScript(url).then(function() {
    var test = new MyClass();
});

如果这还不够,您应该回退到使用 setInterval 触发的检查类是否存在(找到类后停止间隔)。 这样,当脚本在加载后执行时,您就可以避免对特定浏览器行为的任何依赖。

function afterScriptExecuted() {
    var test = new MyClass();
}

function testScriptExecuted() {
    return window.MyClass !== undefined;
}

$.getScript(url).then(function() {
    var id = setInterval(function() {
        if (testScriptExecuted()) {
            clearInterval(id);
            afterScriptExecuted();
        }
    }, 50);
});

关于javascript - 将脚本动态注入(inject)文档时无法实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53979249/

相关文章:

javascript格式价格

jquery - 循环遍历动态添加元素的数组

javascript - 当我通过内联函数调用返回一个对象到 ES6/Reactjs 中的另一个对象时出错

javascript - 在模块化 ES6 中使用 D3

javascript - 我如何将 html 输入数据传递给 javascript 类

javascript - javascript引用错误的解决方法是什么?

javascript - Angularjs 翻译提供者前缀问题

javascript - 没有特定子项的 Protractor 过滤器元素

javascript - 如何聚焦隐藏的输入字段

javascript - CSS:悬停:覆盖后为我中断了jquery的点击