如何在javascript中从字典调用函数
我只是在构建一个API_路由系统,让我可以为API构建以类为中心的模块,我不一定是为了行业最佳实践,我只是为了好奇而充实了如何用javascript构建东西的想法 我有一个ServerManager类,当服务器运行时处理所有处理,这个类使用我开发的API_Router类来处理提供的URL,并将请求传递给适当的模块进行处理 目前我使用的URL是 /用户/ 这告诉我的程序我打算访问用户模块如何在javascript中从字典调用函数,javascript,node.js,Javascript,Node.js,我只是在构建一个API_路由系统,让我可以为API构建以类为中心的模块,我不一定是为了行业最佳实践,我只是为了好奇而充实了如何用javascript构建东西的想法 我有一个ServerManager类,当服务器运行时处理所有处理,这个类使用我开发的API_Router类来处理提供的URL,并将请求传递给适当的模块进行处理 目前我使用的URL是 /用户/ 这告诉我的程序我打算访问用户模块 var http = require('http'); //#File: UserManager.js
var http = require('http');
//#File: UserManager.js
///http://localhost:8080/user/23123/
///http://localhost:8080/user/add/23123/
var UserManager = {};
UserManager.Create = function() {
var UserAcc = {
"Username": "test123",
"FirstName": "cody",
"LastName": "jones",
"Id": "000001"
};
return UserAcc;
}
UserManager.route = function(){
return 'user';
}
UserManager.routeMapping = {
"add": this.Create
}
UserManager.Run = function(Data){
var runMe = Data[0];
console.log(this.routeMapping);
console.log(this.routeMapping[runMe]);
}
UserManager.hasSubmodule = false;
module.exports = UserManager;
每个模块都能够定义routeMapping函数中的子模块或函数
我正在附加处理用户模块的User.js文件
var http = require('http');
//#File: UserManager.js
///http://localhost:8080/user/23123/
///http://localhost:8080/user/add/23123/
var UserManager = {};
UserManager.Create = function() {
var UserAcc = {
"Username": "test123",
"FirstName": "cody",
"LastName": "jones",
"Id": "000001"
};
return UserAcc;
}
UserManager.route = function(){
return 'user';
}
UserManager.routeMapping = {
"add": this.Create
}
UserManager.Run = function(Data){
var runMe = Data[0];
console.log(this.routeMapping);
console.log(this.routeMapping[runMe]);
}
UserManager.hasSubmodule = false;
module.exports = UserManager;
我正在尝试构建routeMapping函数,以关联我为API构建的所有函数,因此我需要确保根据URL调用适当的函数
UserManager.routeMapping = {
"add": this.Create //What am I doing wrong here
}
UserManager.Run = function(Data){
var runMe = Data[0];//This will resolve to a string "add"
this.routeMapping[runMe]();//This should run the function stored in the routemapping
}
您使用此是错误的。该上下文中的
this
属于全局范围,因为您的新属性正好位于对象内部,并且该对象是在全局范围中定义的
您可以执行以下操作,它应该可以工作:
// This is not a function but an object, it doesn't get it's own `this`
UserManager.routeMapping = {
"add": UserManager.Create
}
// This is a function, and thus the `this` will be `UserManager`
UserManager.Run = function(Data){
var runMe = Data[0];
this.routeMapping[runMe]();
}
由于作用域中有UserManager
,只需引用它的Create属性,它也是一个函数
这就是我认为你想要做的:
var UserManager = {};
UserManager.Create = function() {
var UserAcc = {
"Username": "test123",
"FirstName": "cody",
"LastName": "jones",
"Id": "000001"
};
return UserAcc;
}
UserManager.route = function(){
return 'user';
}
UserManager.routeMapping = function () {
return {
"add": this.Create
}
}
UserManager.Run = function(Data){
var runMe = Data[0];
var mappings = this.routeMapping();
return mappings[runMe]();
}
console.log(UserManager.Run(["add"]))
请注意routingMapping是如何返回所需数据的函数。这一更改允许您使用
此
您对此
的使用是错误的。该上下文中的this
属于全局范围,因为您的新属性正好位于对象内部,并且该对象是在全局范围中定义的
您可以执行以下操作,它应该可以工作:
// This is not a function but an object, it doesn't get it's own `this`
UserManager.routeMapping = {
"add": UserManager.Create
}
// This is a function, and thus the `this` will be `UserManager`
UserManager.Run = function(Data){
var runMe = Data[0];
this.routeMapping[runMe]();
}
由于作用域中有UserManager
,只需引用它的Create属性,它也是一个函数
这就是我认为你想要做的:
var UserManager = {};
UserManager.Create = function() {
var UserAcc = {
"Username": "test123",
"FirstName": "cody",
"LastName": "jones",
"Id": "000001"
};
return UserAcc;
}
UserManager.route = function(){
return 'user';
}
UserManager.routeMapping = function () {
return {
"add": this.Create
}
}
UserManager.Run = function(Data){
var runMe = Data[0];
var mappings = this.routeMapping();
return mappings[runMe]();
}
console.log(UserManager.Run(["add"]))
请注意routingMapping是如何返回所需数据的函数。这一更改允许您使用
此
此
必须是用户管理器
此
必须是用户管理器
,以便我在使用此项时更好地理解我的错误。创建基本上是尝试引用“UserManager.routeMapping.Create”,它显然不存在?正确。我将更新我的答案,我认为你可能真的很想做。让我知道它是否有意义。最初的答案提供了我需要的确切解决方案,但很高兴知道我可以使用函数使“this”可访问。只是为了更好地理解我的错误,当我使用它时。Create基本上是指“UserManager.routeMapping.Create”,它显然不存在?正确。我将更新我的答案,我认为你可能真的很想做。让我知道它是否有意义。最初的答案提供了我所需要的确切解决方案,但很高兴知道我可以使用一个函数来访问“this”。