正如crockford和john resig所主张的那样,应该将对象包装在匿名函数中。但是,如果需要多个实例怎么办?包装后,将仅存在一个实例(单例)。
更新:我忘了说我当然是在谈论框架的根对象(不是jquery,而是我自己的)而不是任何对象。由于它是一个框架,因此实例的数量是未知的,无法由客户端决定。
我猜有99.99%的人只是使用框架而没有建立自己的框架,因此,如果您不知道不要尝试回答某些问题,您可能会不理解自己:)
这是从直接实例化的函数创建伪命名空间的方法的简单示例:
var NS = (function(){
function Person(name,gender,age){
this.name = name || '';
this.gender = gender || '';
this.age = age || 0;
}
return {
createPerson: function(n,g,a) {return new Person(n,g,a);}
};
}());
Run Code Online (Sandbox Code Playgroud)
现在NS是伪命名空间,您可以从中创建Person类似这样的实例:
var pete = NS.createPerson('Pete','male',23);
alert(pete.name); //=> Pete
Run Code Online (Sandbox Code Playgroud)
在NS函数内,您可以使用函数,对象,局部变量等创建一个完整的框架。在返回的对象中,您可以包括所有需要的所有公共方法。