var method = 'serviceName.MethodName'
Je veux juste l'appeler commeAppel fonction avec rappel définie comme chaîne
serviceName.methodName(function(output callback){
});
Y at-il approche de it.thanks appeler
var method = 'serviceName.MethodName'
Je veux juste l'appeler commeAppel fonction avec rappel définie comme chaîne
serviceName.methodName(function(output callback){
});
Y at-il approche de it.thanks appeler
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](...)
}
Il existe deux méthodes que je peux penser maintenant.
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)();
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')
Il y a deux problèmes distincts dans votre question:
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:
someObject['serviceName']['MethodName']
merci Steve. ça marche pour moi – shiva