私がやろうとしていることの具体例から始めましょう。
の形式で、年、月、日、時、分、秒、ミリ秒のコンポーネントの配列があります[ 2008, 10, 8, 00, 16, 34, 254 ]
。次の標準コンストラクターを使用してDateオブジェクトをインスタンス化したいと思います。
new Date(year, month, date [, hour, minute, second, millisecond ])
配列をこのコンストラクターに渡して、新しいDateインスタンスを取得するにはどうすればよいですか?[更新:私の質問は実際にはこの特定の例を超えています。Date、Array、RegExpなどのコンストラクターが私の手の届かないところにある組み込みのJavaScriptクラスの一般的なソリューションが欲しいのですが。]
私は次のようなことをしようとしています:
var comps = [ 2008, 10, 8, 00, 16, 34, 254 ];
var d = Date.prototype.constructor.apply(this, comps);
おそらくnew
どこかに「」が必要です。上記は、「(new Date()).toString()
」と呼んだかのように現在の時刻を返すだけです。私はまた、私が上記で完全に間違った方向にいる可能性があることを認めます:)
注:eval()
配列項目に1つずつアクセスすることはできません。アレイをそのまま使用できるはずです。
更新:さらなる実験
まだ誰も実用的な答えを思い付くことができていないので、私はもっと遊んでいます。これが新しい発見です。
私は自分のクラスでこれを行うことができます:
function Foo(a, b) {
this.a = a;
this.b = b;
this.toString = function () {
return this.a + this.b;
};
}
var foo = new Foo(1, 2);
Foo.prototype.constructor.apply(foo, [4, 8]);
document.write(foo); // Returns 12 -- yay!
ただし、組み込みのDateクラスでは機能しません。
var d = new Date();
Date.prototype.constructor.call(d, 1000);
document.write(d); // Still returns current time :(
Numberでも機能しません:
var n = new Number(42);
Number.prototype.constructor.call(n, 666);
document.write(n); // Returns 42
たぶん、これは組み込みオブジェクトでは不可能ですか?FirefoxBTWでテストしています。