Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么方法最适合让函数在javascript中实例化其他函数?_Javascript_Jquery - Fatal编程技术网

什么方法最适合让函数在javascript中实例化其他函数?

什么方法最适合让函数在javascript中实例化其他函数?,javascript,jquery,Javascript,Jquery,我一直在使用这种方法: var __foo = new function(){ var _id = null; function GetId(){ return _id; } function SetId(id){ _id = id; } return{ GetId : GetId, SetId : SetId, }; } var __fooFactory = function(){ var _foos = []; var _autoIncFooId = 0;

我一直在使用这种方法:

var __foo = new function(){
 var _id = null;
 function GetId(){
  return _id;
 }
 function SetId(id){
  _id = id;
 }
 return{
  GetId : GetId,
  SetId : SetId,
 };
}

var __fooFactory = function(){
 var _foos = [];
 var _autoIncFooId = 0;

 function CreateFoo(){
  var newFoo = new __foo();
  newFoo.SetId(_autoIncFooId++);
  _foos.push(newFoo);
 }

 return{
  CreateFoo : CreateFoo
 };
}
我应该更多地使用原型而不是这个实现吗?有没有其他方法可以替代这种方法?(我对jQuery的想法持开放态度,但如果是这样,请将其保留在1.4.4或注意版本遵从性)

Foo构造函数:

function Foo(i) {
    var id = i; // private

    this.getId = function () {
        return id;
    };

    this.setId = function (i) {
        id = i;
    };
}
function FooFactory() {
    var i = 0,
        foos = [];

    this.createFoo = function () {
        var foo = new Foo(i++);
        foos.push(foo);
        return foo;
    };
}
工厂建造商:

function Foo(i) {
    var id = i; // private

    this.getId = function () {
        return id;
    };

    this.setId = function (i) {
        id = i;
    };
}
function FooFactory() {
    var i = 0,
        foos = [];

    this.createFoo = function () {
        var foo = new Foo(i++);
        foos.push(foo);
        return foo;
    };
}
用法:

var fooFactory0 = new FooFactory(),
    foo00 = fooFactory0.createFoo(), // getId() -> 0
    foo01 = fooFactory0.createFoo(); // getId() -> 1

var fooFactory1 = new FooFactory(),
    foo10 = fooFactory1.createFoo(), // getId() -> 0
    foo11 = fooFactory1.createFoo(); // getId() -> 1
如果您想要公共
id
,可以使用prototype:

function Foo(i) {
    this.id = i; // public
}

Foo.prototype.getId = function () {
    return this.id;
};

Foo.prototype.setId = function (i) {
    this.id = i;
};
克罗克福德是怎么说的

新建
直接放在
函数
前面从来都不是一个好主意。例如,
new函数
在构造新对象时没有优势。通过使用
new
调用函数,对象将保留一个毫无价值的原型对象。这浪费了内存,没有抵消优势


你绝对不应该使用这个方法,因为有一个类型错误。你试过运行这个吗?你确定你对Javascript足够熟悉,可以使用内联
new
s吗?@Triptych-我已经用过了,很好用。new关键字允许创建唯一的对象。@Triptych-您认为TypeError在哪里?调用
\uuuuuFooFactory.CreateFoo()
将引发TypeError,因为您调用的是
new\uuuuFoo()
,但第1行的
new
语句将\uuuuuFoo设置为内联函数(普通对象)的返回值而不是函数本身,我认为你的意思是这样做的。@Triptych-不会给我一个错误,你能显示你得到的消息吗?我试图在这里创建独特的对象。主要是因为我想在执行此操作时将它们附加到DOM中。如果它们不是唯一的,在一个地方的更改可能会导致页面上错误的元素更改。