Básicamente, tengo un constructor de esta manera:pasar todos los argumentos a un constructor
function A() {
this.content = toArray(arguments); // toArray converts it to an array
}
me gustaría llamarlo desde otra función:
function B() {
return new A();
}
El problema es, que había desea pasar todos los argumentos pasados a B
, a A
también.
no puedo usar apply
(de un modo común):
- No habrá un constructor si sólo
apply
a cualquier objeto viejo - no puedo
apply
a laprototype
, a menos que haya una manera fácil de clonarlo que no sé sobre - No puedo simplemente crear un
new A
para pasarlo de nuevo; en realidad,A()
lanza si no se pasa ningún argumento, y me gustaría mantener esta funcionalidad.
Yo he llegado con algunas soluciones:
otro constructor!
function C() {} C.prototype = A.prototype; function B() { var obj = new C(); A.apply(obj, arguments); return obj; }
Otra función!
function _A(_arguments) { if(_arguments.length === 0) { return this; } // Do initialization here! } _A.prototype.constructor = A; function A() { if(arguments.length === 0) { throw new Error("That's not good."); } return new _A(toArray(arguments)); } function B() { return new _A(toArray(arguments)); }
El resto de ellos son más o menos lo mismo en un formato diferente
Pero hay una manera muy fácil y obvio para hacer esto?
'Object.create' es perfecto. ¡Gracias! – Ryan
@minitech: De nada. –