Node.js 调用回调定义为字符串的函数
我只是想这样称呼它Node.js 调用回调定义为字符串的函数,node.js,sails.js,Node.js,Sails.js,我只是想这样称呼它 var method = 'serviceName.MethodName' 有什么方法可以调用它吗?谢谢我不知道有什么方法可以在不使用eval的情况下将该字符串的serviceName部分解析为对象。所以很明显你需要非常小心 也许: serviceName.methodName(function(output callback){ }); 我现在可以想到两种方法 JS评估 您可以使用javascript eval函数将任何字符串转换为代码段,如下所示。虽然eval是一个
var method = 'serviceName.MethodName'
有什么方法可以调用它吗?谢谢我不知道有什么方法可以在不使用eval的情况下将该字符串的serviceName部分解析为对象。所以很明显你需要非常小心 也许:
serviceName.methodName(function(output callback){
});
我现在可以想到两种方法 JS评估 您可以使用javascript eval函数将任何字符串转换为代码段,如下所示。虽然eval是一个快速的解决方案,但不应该使用,除非你身边没有其他选择 var方法='UserService.getData'; 评价方法 工厂模式 使用下面的模式获得服务 您需要以这样一种方式定义服务,即您可以使用模式访问它们
if (method.match(/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$/) {
var servicePart = eval(method.split('.')[0]);
var methodPart = method.split('.')[1];
servicePart[methodPart](...)
}
您可以使用下面的代码获取所需的服务
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')
关于第二个问题,这取决于serviceName是什么:
如果它是某个其他对象的属性,则使用someObject['serviceName']['MethodName']
如果是局部变量,请考虑使用映射将字符串与对象关联;
const myObject = {
myProp: 1,
};
console.log(myObject['myProp']);