Permettez-moi de commencer avec un exemple précis de ce que je suis en train de faire.
J'ai un tableau de l'année, le mois, le jour, l'heure, les minutes, les secondes et les millisecondes composants sous la forme [ 2008, 10, 8, 00, 16, 34, 254 ]
. Je tiens à instancier un objet Date en utilisant la norme suivante constructeur:
new Date(year, month, date [, hour, minute, second, millisecond ])
Comment puis-je passer mon tableau de ce constructeur pour obtenir une nouvelle instance de Date? [ Mise à jour: Ma question s'étend au-delà de cet exemple précis. J'aimerais une solution générale pour JavaScript intégrés classes comme la Date, le Tableau, RegExp, etc. dont les constructeurs sont au-delà de ma portée. ]
Je suis en train de faire quelque chose comme ce qui suit:
var comps = [ 2008, 10, 8, 00, 16, 34, 254 ];
var d = Date.prototype.constructor.apply(this, comps);
J'ai probablement besoin d'un "new
", quelque part. Le ci-dessus retourne l'heure courante comme si je l'avais appelé "(new Date()).toString()
". Je reconnais aussi que je suis peut-être complètement dans la mauvaise direction avec la ci-dessus :)
Remarque: Non eval()
et pas d'accès au tableau les éléments un par un, s'il vous plaît. Je suis assez sûr que je devrais être en mesure d'utiliser le tableau comme est.
Mise À Jour: D'Autres Expériences
Depuis, personne n'a été en mesure de venir avec un travail encore de réponse, j'ai fait plus de jouer autour. Voici une nouvelle découverte.
Je peux le faire avec mon propre classe:
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!
Mais il ne fonctionne pas avec les intrinsèque classe Date:
var d = new Date();
Date.prototype.constructor.call(d, 1000);
document.write(d); // Still returns current time :(
Ne s'agit-il de travailler avec Nombre:
var n = new Number(42);
Number.prototype.constructor.call(n, 666);
document.write(n); // Returns 42
Peut-être que ce n'est tout simplement pas possible avec des objets intrinsèques? Je me suis mise à l'essai avec Firefox BTW.