如果已加载某个其他模块,我想检查脚本.
if (ModuleName) {
// extend this module
}
Run Code Online (Sandbox Code Playgroud)
但如果ModuleName不存在,那就是throws.
如果我知道Global Object我能用什么呢.
if (window.ModuleName) {
// extend this module
}
Run Code Online (Sandbox Code Playgroud)
但是,因为我希望我的模块与浏览器和工作node,rhino等等,我不能假设window.
据我了解,这在ES 5中不起作用"use strict";
var MyGLOBAL = (function () {return this;}()); // MyGlobal becomes null
Run Code Online (Sandbox Code Playgroud)
这也会因抛出异常而失败
var MyGLOBAL = window || GLOBAL
Run Code Online (Sandbox Code Playgroud)
所以我似乎离开了
try {
// Extend ModuleName
}
catch(ignore) {
}
Run Code Online (Sandbox Code Playgroud)
这些情况都不会传递JSLint.
我错过了什么吗?
是否可以使用字符串创建新对象?例如,如何将字符串"product"转换为var p = new Product?
提前致谢.
编辑
我想要做的是<a href="#home"></a><a href="#products">products</a>每次都有一个菜单,并从href创建相应的对象.
标题说明了一切。我唯一能找到的是全局变量存储在window下,但对于使用class关键字定义的类来说似乎并非如此。
class Foo {
constructor() {
console.log('A Foo is created');
}
}
const foo = new Foo();
const bar = new window['Foo'](); // TypeError: window.Foo is not a constructorRun Code Online (Sandbox Code Playgroud)
我知道人们可以写类似的东西let Foo = class Foo {},但我想保持低冗余。另外,我很感兴趣是否存在一个真正的、非解决方案的解决方案只是出于好奇。