var method = 'serviceName.MethodName'
我只是想這樣稱呼它與回調函數調用定義爲字符串
serviceName.methodName(function(output callback){
});
有什麼方法調用it.thanks
var method = 'serviceName.MethodName'
我只是想這樣稱呼它與回調函數調用定義爲字符串
serviceName.methodName(function(output callback){
});
有什麼方法調用it.thanks
我不知道的任何方式,您可以將該字符串的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](...)
}
有,我現在能想到的兩種方法。
JS的eval 您可以使用JavaScript eval函數任意字符串轉換成代碼片段像下面。雖然eval是一個快速解決方案,但不應該使用,除非你沒有任何其他選擇。
var method ='UserService.getData'; eval(method)();
工廠模式 使用以下方式獲得服務
你會需要這樣你可以使用一個模式訪問它們的方式來定義服務。
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')
有你的問題兩個不同的問題:
關於第一個問題 - 它很容易通過字符串中使用下面的符號來訪問對象的屬性:
const myObject = {
myProp: 1,
};
console.log(myObject['myProp']);
和關於第二個問題 - 這取決於什麼serviceName
是:
someObject['serviceName']['MethodName']
謝謝Steve。這個對我有用 – shiva