我尝试了一下,它似乎可以工作,但是我想知道它是否有效,并且在所有浏览器中都可以。我基本上想仅在用户登录的情况下才将函数作为全局对象调用。创建的对象保持在全局范围内很重要。所以我尝试了:
var specialStuff; // defined globally
然后在“ myMainObject”中的一些Ajax代码调用this.involeSpecialStuff();如果用户已登录:
myMainObject.prototype.invokeSpecialStuff = function(){
document.specialStuff = new specialStuff({foo:bar});
});
我的问题的重点是“ document.specialStuff”部分,它是否是访问全局预定义的空“ specialStuff”变量的正确方法,而不是“ specialStuff = new specialStuff()”,它会导致“ TypeError:未定义不是构造函数(正在评估'new specialStuff({foo:bar});“
谢谢
最佳答案
考虑到您给出的解释,并且specialStuff
是引用函数(类)的全局变量,因此您无法执行specialStuff = new specialStuff();
,因为您正在用specialStuff
类中的新实例覆盖相同的值。它会在第一次运行,但下一次确实会触发您提到的错误。
您不需要使用document.specialStuff
(尽管它可以工作)。您可以简单地为其使用另一个变量,如下所示:
myMainObject.prototype.invokeSpecialStuff = function(){
var mySpecialStuff = new specialStuff({foo:bar});
});
编辑:
这可能是一个完整的示例:
// Defining you class in 'global context'
// Since it is called as a constructor below, it should be a function
var specialSuff = function(args){
// Do your constructor stuff here
};
// Defining a variable which is going to hold an instance of specialStuff
var mySpecialStuff;
myMainObject.prototype.invokeSpecialStuff = function(){
// Creating an instance of specialStuff
mySpecialStuff = new specialStuff({foo:bar});
});