2017-06-15 111 views

回答

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](...) 
} 
+0

谢谢Steve。这个对我有用 – shiva

1

有,我现在能想到的两种方法。

  1. JS的eval 您可以使用JavaScript eval函数任意字符串转换成代码片段像下面。虽然eval是一个快速解决方案,但不应该使用,除非你没有任何其他选择。

    var method ='UserService.getData'; eval(method)();

  2. 工厂模式 使用以下方式获得服务

你会需要这样你可以使用一个模式访问它们的方式来定义服务。

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; 
} 
} 

可以使用get与下面的代码所需的服务

Services.getService('User') 
0

有你的问题两个不同的问题:

  1. 如何通过属性名来访问对象属性(字符串) ?
  2. 如何通过它的名称(字符串)访问对象?

关于第一个问题 - 它很容易通过字符串中使用下面的符号来访问对象的属性:

const myObject = { 
    myProp: 1, 
}; 

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

和关于第二个问题 - 这取决于什么serviceName是: