在MDN classes concept上工作时,我想检查一个类是否退出(不是对象或函数)以便动态加载它,如果是,则重新定义它。
我尝试了很多方式(typeOf,instanceof ...)失败......
Class APP{
[...]
registerModule( moduleName, force )
{
if( this.modules[ moduleName ] === undefined || force )
{
console.log( "loading "+moduleName+"/js/"+moduleName+"Module.js ..." );
//~ TODO : Add a test if class already loaded and if we have to 'unload' or re-define it
this.loadScript( moduleName+"/js/"+moduleName+"Module.js", function(){
APP.modules[moduleName] = eval( "new "+moduleName+"()" );
});
}else{
alert( "Moule '"+moduleName+"' already declared !");
}
}
}
答案 0 :(得分:-1)
尝试混合检查班级的独特特征:
var exists = typeof c !== 'undefined' ? classExists(c) : false;
function classExists(c) {
return typeof(c) == "function" && typeof(c.prototype) == "object"
}
答案 1 :(得分:-1)
好的,找到了办法:
class APP{
constructor() {
this.modules = [];
}
registerModule( moduleName, force )
{
if( this.modules[ moduleName ] === undefined || force )
{
if( this.modules[ moduleName ] === undefined )
{
this.loadScript( moduleName+"/js/"+moduleName+"Module.js", function(){
APP.modules[moduleName] = eval( "new "+moduleName+"()" );
});
}else{
APP.modules[moduleName] = eval( "new "+moduleName+"()" );
}
}else{
alert( "Le module '"+moduleName+"' est déjà déclaré !");
}
}
}
可以这样调用:
APP.registerModule( 'Batch' ,true)
Class在首次加载时会被实例化。 基于相同的类定义,在新模块注册时覆盖对象。类不能重新定义(太糟糕)。 感谢您的评论!