Javascript 如果函数名不是';构造字符串';

Javascript 如果函数名不是';构造字符串';,javascript,exception,object,factory,dynamic-loading,Javascript,Exception,Object,Factory,Dynamic Loading,我有一个工厂类,我在JavaScript中使用它通过AJAX动态加载一个类文件,然后返回一个对象。我在系统中遇到了一个非常奇怪的错误,尽管它会在每个浏览器中抛出错误,但这种情况超出了我的解释能力 这里是我的Factory类的简化版本(我删除了很多类型检查和错误处理,将其减少到最低限度) 这就是用户所做的: var Factory=new Factory(); var alpha=Factory.getObject('example'); alpha.set(32); alpha.get(

我有一个工厂类,我在JavaScript中使用它通过AJAX动态加载一个类文件,然后返回一个对象。我在系统中遇到了一个非常奇怪的错误,尽管它会在每个浏览器中抛出错误,但这种情况超出了我的解释能力

这里是我的Factory类的简化版本(我删除了很多类型检查和错误处理,将其减少到最低限度)

这就是用户所做的:

 var Factory=new Factory();
 var alpha=Factory.getObject('example');
 alpha.set(32);
 alpha.get();
 var beta=Factory.getObject('example');
 beta.set(64);
 alpha.get();
 beta.get();
此操作失败,当函数第二次运行时(在
返回新窗口[className];
行),会显示“对象不是函数”。我明白如果我在这里遗漏了什么,但关键是:

如果在我的
窗口[]
调用中使用前缀
className
,则它可以工作。例如,如果我将我的
'example'
类文件名更改为
'test\u example'
,然后有以下几行:

... if(window['test_'+className]!=null){ ...
... if(typeof(window['test_'+className])=='function'){ ...
... return new window['test_'+className]; ...
然后它工作,alpha和beta对象都按预期工作。当我纯粹通过变量引用它们时,它们失败了。我尝试了className.toString()之类的方法,但没有成功,甚至失败:

className+''
这真的很奇怪,我不知道该去哪里看,也不知道该尝试什么,有人知道为什么会发生这种情况吗

编辑:下面是正在加载的“example.js”脚本示例:

function example(){

    var myVar=16;

    this.set=function(value){
        myVar=value;
    }

    this.get=function(){
        alert(myVar);
    }

}

(如果我将其重命名为test_example(),并使用构造的字符串加载如上所示的函数,那么它将再次工作)

我找到了错误所在,而我上面的简化版本没有显示。显然,我将新变量命名为与类本身的名称相同的名称,因此在第一次初始化后,它被覆盖。

您可以发布正在加载的文件的示例吗?似乎您正在覆盖
窗口。例如
<代码>窗口是中的全局范围javascript@MattWhipple,添加了示例文件。@JanDvorak但我不是,脚本中没有其他内容。该示例仅在加载字符串时构造该字符串时有效,无论我如何命名它。如果我把它写为“'exa'+name”,并且有Factory.getObject('mpe'),那么它也可以工作。但当它只是一个未修改的变量时,它就会失败。我看不出它怎么会因为重复使用的字符串而失败。如果您构造了字符串,它是重用加载的类还是每次都获取一个新类?
function example(){

    var myVar=16;

    this.set=function(value){
        myVar=value;
    }

    this.get=function(){
        alert(myVar);
    }

}