让我先举一个我想要做的具体例子。
我有一个由年、月、日、时、分、秒和毫秒组成的数组,形式为[2008,10,8,00,16,34,254]
。 我想使用以下标准构造函数实例化一个日期对象:
new Date(year, month, date [, hour, minute, second, millisecond ])
如何将我的数组传递给此构造函数以获取一个新的日期实例?[ 更新:我的问题实际上超出了这个具体示例。我想要一个通用的解决方案,适用于内置的JavaScript类,如Date、Array、RegExp等,它们的构造函数超出了我的范围。]
我正在尝试做以下事情:
var comps = [ 2008, 10, 8, 00, 16, 34, 254 ];
var d = Date.prototype.constructor.apply(this, comps);
我觉得需要在某个地方加上"new
"。以上代码仅返回了当前时间,就像我调用了 "(new Date()).toString()
" 一样。我也认识到我可能完全走错方向了 :)
注意:请勿使用 eval()
和逐个访问数组项。我相信我应该能够直接使用该数组。
更新:进一步实验
由于没有人能够提供有效的答案,所以我进行了更多尝试。这是一个新的发现。
我可以使用自己的类来完成这个任务:
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 :(
它也不适用于数字:
var n = new Number(42);
Number.prototype.constructor.call(n, 666);
document.write(n); // Returns 42
也许这在固有对象中不可能实现?顺便说一下,我是在测试Firefox。
Date.fromArray = function (year, month, date, hours, minutes, seconds, ms) { return new Date(year, month, date, hours || 0, minutes || 0, seconds || 0, ms || 0); }
然后使用Date.fromArray.apply(null,arraywithtime);
进行调用。请注意,您必须至少有年、月和日,否则将得到无效日期。 - some