【发布时间】:2011-11-15 05:28:10
【问题描述】:
我一直在尝试通过为我的代码创建一个命名空间来使我的 javascript 代码更好,这样就不会出现全局变量/函数冲突,并且还将命名空间中的所有内容都放在匿名函数中,因此除非另有明确说明,否则所有内容都是私有的通过return语句。
Atm,我收到“未捕获的类型错误:对象不是函数”
var Namespace = (function() {
//private variables/functions
var a;
var b;
function priv_func1() {
//do stuff
}
//public variables/functions
return {
pub_var1: b,
pub_func1: function() {
//do stuff
}
};
})();
$(document).ready(function() {
var myName = new Namespace();
myName.pub_func1();
}
因此,当我删除命名空间定义末尾的 () 将函数声明转换为函数表达式时,我没有收到任何错误,但在示例中我看到它们在那里有 (),所以我我想知道发生了什么事。
我也将它放在命名空间定义的开头,以便在用户不小心忽略新关键字时进行更正。
if (!(this instanceof Namespace))
return new Namespace();
编辑:另外,我应该将我的文档就绪函数放在命名空间定义之前还是之后。
【问题讨论】:
标签: javascript object namespaces closures global