我尝试了一下,它似乎可以工作,但是我想知道它是否有效,并且在所有浏览器中都可以。我基本上想仅在用户登录的情况下才将函数作为全局对象调用。创建的对象保持在全局范围内很重要。所以我尝试了:

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});
});

09-25 16:34