Fondamentalmente, ho un costruttore come questo:Passando tutti gli argomenti a un costruttore
function A() {
this.content = toArray(arguments); // toArray converts it to an array
}
mi piacerebbe chiamarlo da un'altra funzione:
function B() {
return new A();
}
Il problema è, mi piacerebbe piace passare tutti gli argomenti passati a B
, a A
pure.
posso non uso apply
(in un modo comune):
- Non sarà un costruttore se ho appena
apply
a qualsiasi vecchio oggetto - non posso
apply
alprototype
, a meno che non ci sia un modo semplice per clonarlo che non conosco - Non riesco a creare un nuovo
new A
; in realtà,A()
genera se non viene passato alcun argomento e vorrei mantenere questa funzionalità.
mi è venuta in mente un paio di soluzioni:
un altro costruttore!
function C() {} C.prototype = A.prototype; function B() { var obj = new C(); A.apply(obj, arguments); return obj; }
Un'altra funzione!
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)); }
Il resto di loro sono più o meno la stessa cosa in un formato diverso
Ma c'è un modo molto semplice e ovvio per fare questo?
'Object.create' è perfetto. Grazie! – Ryan
@minitech: prego. –