首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过调用prototype.constructor.apply实例化JavaScript对象

通过调用prototype.constructor.apply实例化JavaScript对象
EN

Stack Overflow用户
提问于 2008-10-08 04:32:36
回答 13查看 22.1K关注 0票数 54

让我从一个我想要做的事情的具体例子开始。

我有一组[ 2008, 10, 8, 00, 16, 34, 254 ]形式的年、月、日、小时、分钟、秒和毫秒组件。我想使用以下标准构造函数实例化一个Date对象:

new Date(year, month, date [, hour, minute, second, millisecond ])

如何将数组传递给此构造函数以获得新的Date实例?[ Update__:我的问题实际上超出了这个特定的示例。我想要一个通用的解决方案,用于内置的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进行测试。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/181348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档