2017-06-15 1 views

Répondre

0

Je ne suis pas au courant d'aucune façon, vous pouvez résoudre la partie serviceName de cette chaîne à un objet, sans utiliser eval. Donc, évidemment, vous devez être extrêmement prudent.

Peut-être:

if (method.match(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$/) { 
    var servicePart = eval(method.split('.')[0]); 
    var methodPart = method.split('.')[1]; 
    servicePart[methodPart](...) 
} 
+0

merci Steve. ça marche pour moi – shiva

1

Il existe deux méthodes que je peux penser maintenant.

  1. JS eval Vous pouvez utiliser la fonction javascript eval pour convertir une chaîne en extrait de code comme ci-dessous. Bien qu'éval soit une solution rapide, mais ne devrait pas être utilisé, sauf si vous n'avez pas d'autre option à vos côtés.

    var méthode = 'ServiceServeur.getData'; eval (méthode)();

  2. modèle d'usine Utilisez un modèle ci-dessous pour obtenir le service

Vous devez définir les services de telle sorte que vous pouvez y accéder en utilisant un modèle.

var Services = { 
// UserService and AccountsService are again objects having some callable functions. 
    UserService : {getData: function(){}, getAge: function(){}}, 
    AccountsService : {getData: function(){}, getAge: function(){}}, 
// getService is the heart of the code which will get you the required service depending on the string paramter you pass. 
    getService : function(serviceName){ 
     var service = ''; 
     switch(serviceName){ 
      case 'User': 
       service = this.UserService; 
       break; 
      case 'Accounts': 
       service = this.AccountsService; 
       break; 
     } 
    return service; 
} 
} 

Vous pouvez utiliser obtenir le service requis avec le code ci-dessous

Services.getService('User') 
0

Il y a deux problèmes distincts dans votre question:

  1. Comment accéder à la propriété d'objets par nom de la propriété (string) ?
  2. Comment accéder à l'objet par son nom (chaîne de caractères)?

En ce qui concerne le premier problème - il est facile d'accéder à la propriété d'objet par chaîne en utilisant la notation suivante:

const myObject = { 
    myProp: 1, 
}; 

console.log(myObject['myProp']); 

Et en ce qui concerne le deuxième problème - cela dépend de ce serviceName est: