我有这个功能:
(function(window, document,undefined) {
'use strict';
function Test() {
this.init = function() {
console.log("init");
}
};
return new Test;
})(window, document);
我知道class Test
只能在此上下文中访问。
但我想这样做:
Test.init();
如果我将它存储到一个变量中并且这样做:
var t = (function() {...})();
并执行console.log(t)
它将返回class itself
然后,我可以检索它。但我不想那样做
我想知道,有没有办法从这个Javascript Self Invoking Functions中检索这个类? 如果有可能,如何实现呢?
这是我正在使用的小提琴:http://jsfiddle.net/grnagwg8/
此致
答案 0 :(得分:1)
如果你想在内联调用函数(它不是 self -invoking)中使它成为全局函数,请在window
上分配一个属性:
(function(window, document,undefined) {
'use strict';
function Test() {
this.init = function() {
console.log("init");
}
};
window.test = new Test; // <====
})(window, document);
然后
test.init();
在浏览器中, window
是对全局对象的引用。全局对象的属性是全局变量。
但总的来说,最好避免使用全局变量。如果你有多个这样的东西,考虑使用一个对象并将它们作为属性放在它上面,所以你只有一个全局而不是很多:
var MyStuff = (function(window, document,undefined) {
'use strict';
function Test() {
this.init = function() {
console.log("init");
}
};
return { // <====
foo: "bar", // <====
baz: "nifty", // <====
test: new Test // <====
}; // <====
})(window, document);
然后
MyStuff.test.init();
您还可以查看&#34;异步模块定义&#34; (AMD)解决方案。
请注意,在上文中,我使用test
而不是Test
作为实例。 JavaScript中的压倒性约定是最初的上限标识符用于构造函数,有时候是&#34; namespace&#34;容器对象(它们不是真正的命名空间,但它是应用于它们的通用名称)。你的实例不是构造函数,所以......