2017-06-15 64 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是: