让我从我正在尝试做的一个具体例子开始。
我在表单中有一个包含年、月、日、小时、分钟、秒和毫秒组件的数组[ 2008, 10, 8, 00, 16, 34, 254 ]
。我想使用以下标准构造函数实例化一个 Date 对象:
new Date(year, month, date [, hour, minute, second, millisecond ])
如何将数组传递给此构造函数以获取新的 Date 实例?[更新:我的问题实际上超出了这个具体例子。我想要一个通用的解决方案,用于内置 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()
也不要一一访问数组项。我很确定我应该能够按原样使用该数组。
更新:进一步的实验
由于还没有人能够提出有效的答案,我已经做了更多的尝试。这是一个新发现。
我可以用我自己的class做到这一点:
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
也许这对于内在对象是不可能的?我正在用 Firefox BTW 进行测试。