var method = 'serviceName.MethodName'
我只想把它称为
serviceName.methodName(function(output callback){
});
是否有任何方法可以调用它。谢谢
答案 0 :(得分:1)
我现在可以想到两种方法。
JS eval 您可以使用javascript eval函数将任何字符串转换为如下所示的代码段。虽然eval是一种快速解决方案,但除非您没有任何其他选择,否则不应使用。
var method ='UserService.getData'; 的eval(方法)();
工厂模式 使用以下模式获取服务
您需要以可以使用模式访问它们的方式定义服务。
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;
}
}
您可以使用以下代码获取所需服务
Services.getService('User')
答案 1 :(得分:0)
我不知道如何在不使用serviceName
的情况下将该字符串的eval
部分解析为对象。显然你需要非常小心。
也许:
if (method.match(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$/) {
var servicePart = eval(method.split('.')[0]);
var methodPart = method.split('.')[1];
servicePart[methodPart](...)
}
答案 2 :(得分:0)
您的问题中有两个不同的问题:
关于第一个问题 - 使用以下表示法很容易通过字符串访问对象属性:
const myObject = {
myProp: 1,
};
console.log(myObject['myProp']);
关于第二个问题 - 这取决于serviceName
是什么:
someObject['serviceName']['MethodName']