什么方法最适合让函数在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中。如果它们不是唯一的,在一个地方的更改可能会导致页面上错误的元素更改。