Grundsätzlich habe ich einen Konstruktor wie folgt aus:Geben alle Argumente an einen Konstruktor
function A() {
this.content = toArray(arguments); // toArray converts it to an array
}
Ich möchte es von einer anderen Funktion aufzurufen:
function B() {
return new A();
}
Das Problem ist, würde ich mag auch alle an B
übergebenen Argumente an A
übergeben.
ich nicht apply
(in einem gemeinsamen Weg) verwenden kann:
- Es wird kein Konstruktor, wenn ich
apply
es nur ein altes Objekt - Ich kann nicht
apply
es dieprototype
, es sei denn, es gibt eine einfache Möglichkeit, es zu klonen, die ich nicht über - kann Ich kann nicht einfach erstellen
new A
, um es erneut zu übergeben; in Wirklichkeit wirftA()
, wenn es keine Argumente übergeben wird, und ich möchte diese Funktionalität behalten.
Ich habe mit ein paar Lösungen kommen:
Ein weiterer Konstruktor!
function C() {} C.prototype = A.prototype; function B() { var obj = new C(); A.apply(obj, arguments); return obj; }
Eine weitere Funktion!
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)); }
Der Rest von ihnen so ziemlich die gleiche Sache in einem anderen Format sind
Aber gibt es eine wirklich einfache und offensichtliche Art und Weise, dies zu tun?
'Object.create' ist perfekt. Vielen Dank! – Ryan
@minitech: Gern geschehen. –