(环境:运行包含HTML,CSS和JS并带有jQuery 1.12.0的用户界面的Chromium浏览器或NWJS;在浏览器和NWJS中观察到的行为完全相同)
我有一个自定义的HaltError子类,该子类通过一些额外的东西扩展了Javascript Error类。该文件位于所有页面都加载的.js文件中,因为它可以通用访问。
我注意到,如果文件是通过旧的HTML标记加载的,则一切按预期进行,并且我可以在任何给定页面使用的任何其他.js文件中创建并抛出错误而不会出现问题。例如,无论我在哪里粘贴,以下内容都可以正常工作:
var tst = new HaltError("Test error!"); //create error
throw tst.log(); //goodies happen
但是,如果包含HaltError类的.js文件是通过jQuery的getScript()加载的,则上述方法将无法正常工作,而我会收到ReferenceError:
var tst = new HaltError("Test error!"); //ReferenceError; HaltError is not defined
这对于任何.js文件 都是正确的,除了包含HaltError子类定义的文件。在该文件内部,函数可以毫无问题地创建HaltError实例:
function throw_HaltError() //call this from another file, and it works fine
{
var test_error = new HaltError("Test error thrown!"); //works
throw test_error.log(); //throws without issue
}
我想知道这是否是一个名称空间问题,但实际上我在同一文件中放入的其他内容似乎可以从其他文件或DevTools控制台访问;函数,变量等都可以引用。
我知道getScript()的异步特性,不认为这是问题所在。例如,在DevTools中,很长时间以来一直加载页面并确认我可以在控制台中看到该.js文件中的函数,但我仍然无法创建HaltError类的新实例(或在出现的自动完成下拉菜单中完全看到HaltError)当您在控制台中输入内容时。
所以我的问题是,类是否存在某些不同之处,这意味着它们在通过$ .getScript()加载时会中断?
我觉得我这里可能缺少一些基本的东西!