2009-09-02 4 views
2

Etant donnée une fonction/déclaration de type comme ceci:Instancier un objet en appelant le constructeur avec la liste de paramètres en utilisant apply?

function Person(name, ... other args ...){ 
    this.name 
    ... other init code ... 
} 

Je voudrais être en mesure d'appeler le constructeur Personne avec un tableau d'arguments à appliquer à lui. Je pourrais faire:

Person.apply(this, args) 

Sauf que cela n'instancie pas une personne, elle l'appelle simplement comme une fonction. Est-il possible que vous appelez de cette manière, mais dans le contexte « nouveau », se comportant comme i.e.:

new Person(...) 
+0

Dup: http://stackoverflow.com/questions/813383/how-can-i-construct-an-object-using-an-array-of -values-for-parameters-rather-tha –

Répondre

1

de la cause:

var newInstance=Person.apply({}, args); 

Vous appliquerez constructeur pour objet vide. Mais vous devez être conscient que ce ne sera pas vraiment une instance de classe. Si vous voulez parier une instance de classe, vous devez placer un clone d'objet prototype comme premier paramètre.

+0

J'ai essayé ceci, mais j'ai dû le modifier pour qu'il fonctionne: var newInstance = {}; Person.apply (newInstance, args); – airportyh

1

Il y avait un assez long va-et-vient à ce sujet before.

En bref, non, vous ne pouvez pas faire cela et le faire fonctionner dans tous les cas. Il existe des exemples de code très utiles sur la façon dont vous pouvez l'accomplir dans ce lien, mais chacun a un cas où il casse. Cela peut être assez bon pour vous cependant.

+0

Non-accepté cette réponse parce qu'il y a maintenant une bonne réponse à http://stackoverflow.com/questions/813383/how-can-i-construct-an-object-using-an-array-of-values-for-parameters -rather-tha # answer-813401 – airportyh

Questions connexes