让我从一个我正在尝试做的具体例子开始。
我在表单中有一组年、月、日、小时、分钟、秒和毫秒组件[ 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()
一一访问数组项。我很确定我应该能够按原样使用数组。
更新:进一步的实验
由于还没有人能够提出一个可行的答案,所以我做了更多的尝试。这是一个新的发现。
我可以用我自己的班级做到这一点:
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 进行测试。