在另一个函数

时间:2015-07-12 02:30:57

标签: javascript

我试过这个似乎有用,但是我想知道它是否是有效的代码并且可以适用于所有浏览器。我基本上只想在用户登录的情况下调用函数作为全局对象。创建的对象保留在全局范围内非常重要。所以我试过了:

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

由于

2 个答案:

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

当然,我总是会质疑你是否真的需要这个全局功能。在大多数情况下,总是要避免全局。