我试过这个似乎有用,但是我想知道它是否是有效的代码并且可以适用于所有浏览器。我基本上只想在用户登录的情况下调用函数作为全局对象。创建的对象保留在全局范围内非常重要。所以我试过了:
var specialStuff; // defined globally
然后在“myMainObject”中调用this.involeSpecialStuff()的一些Ajax代码;如果用户已登录:
myMainObject.prototype.invokeSpecialStuff = function(){
document.specialStuff = new specialStuff({foo:bar});
});
我的问题的重点是“ document.specialStuff ”部分,如果它是访问全局预定义的空“specialStuff”变量的正确方法,而不是“specialStuff” = new specialStuff()“,导致”TypeError:undefined不是构造函数(评估'new specialStuff({foo:bar});“
由于
答案 0 :(得分:1)
考虑到您给出的解释,specialStuff
是一个引用函数(类)的全局var,您不能执行specialStuff = new specialStuff();
,因为您使用{{1的新实例覆盖相同的值} .class。它会在第一次工作,但下次确实会触发你提到的错误。
您不需要使用specialStuff
(尽管它有效)。你可以简单地使用另一个变量,如下所示:
document.specialStuff
修改强>
这可能是一个完整的例子:
myMainObject.prototype.invokeSpecialStuff = function(){
var mySpecialStuff = new specialStuff({foo:bar});
});
答案 1 :(得分:0)
为了在javascript中存储全局变量,您不需要文档部分。可能更好的做法
specialStuff = new specialStuff({foo:bar});
当然,我总是会质疑你是否真的需要这个全局功能。在大多数情况下,总是要避免全局。