如果对象包装在匿名函数中,如何在JavaScript中允许多个实例

use*_*291 2 javascript

正如crockford和john resig所主张的那样,应该将对象包装在匿名函数中。但是,如果需要多个实例怎么办?包装后,将仅存在一个实例(单例)。

更新:我忘了说我当然是在谈论框架的根对象(不是jquery,而是我自己的)而不是任何对象。由于它是一个框架,因此实例的数量是未知的,无法由客户端决定。

我猜有99.99%的人只是使用框架而没有建立自己的框架,因此,如果您不知道不要尝试回答某些问题,您可能会不理解自己:)

Koo*_*Inc 5

这是从直接实例化的函数创建伪命名空间的方法的简单示例:

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函数内,您可以使用函数,对象,局部变量等创建一个完整的框架。在返回的对象中,您可以包括所有需要的所有公共方法。