去掉多余的方法定义
Getting rid of redundant method definitions
有四个方法对应于我用于路由构建的每个HTTP请求方法。
每种方法的方案是:
RouteBuilder.prototype.>>METHOD<< = function (params, callback) {
if(typeof params === "function") {
callback = params;
router.>>METHOD<<(this._path, callback);
return;
}
var subRoute = params.subRoute || "";
var url = this._path + subRoute;
if(params.auth !== undefined) {
router.>>METHOD<<(url, Auth.authenticate(params.auth, { session: false }), callback);
} else {
router.>>METHOD<<(url, callback);
}
};
正如您可能怀疑的那样,方法的名称是:get、post、put和delete。目前我有四个几乎相同的方法定义,我正在寻找更优雅的方法。
我考虑过创建一个带有方法名称的数组,并使用key参数将方法映射到它,但在循环中创建函数似乎不是一个好主意。此外,我还需要这些方法与JSDoc兼容。
好吧,我会发布一个答案,因为你已经完成了99%的工作。你在问题中发布的代码非常接近你正在寻找的通用解决方案:
RouteBuilder.prototype.route = function (method, params, callback) {
if(typeof params === "function") {
callback = params;
router[method](this._path, callback);
return;
}
var subRoute = params.subRoute || "";
var url = this._path + subRoute;
if(params.auth !== undefined) {
router[method](url, Auth.authenticate(params.auth, { session: false }), callback);
} else {
router[method](url, callback);
}
};
RouteBuilder.prototype.get = function(params, callback) {
this.route("get", params, callback);
};
RouteBuilder.prototype.put = function(params, callback) {
this.route("put", params, callback);
};
RouteBuilder.prototype.post = function(params, callback) {
this.route("post", params, callback);
};
RouteBuilder.prototype.del = function(params, callback) {
this.route("del", params, callback);
};
我考虑过创建一个带有方法名称的数组,并使用key参数将方法映射到它,但在循环中创建函数似乎不是一个好主意。
这种方法没有错,它非常简单有效:
['get', 'post', 'put', 'delete'].forEach(function(METHOD) {
RouteBuilder.prototype[METHOD] = function (params, callback) {
if(typeof params === "function") {
callback = params;
router[METHOD](this._path, callback);
return;
}
var subRoute = params.subRoute || "";
var url = this._path + subRoute;
if(params.auth !== undefined) {
router[METHOD](url, Auth.authenticate(params.auth, { session: false }), callback);
} else {
router[METHOD](url, callback);
}
};
});
相关文章:
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 用于检查数组中是否存在元素的javascript自定义方法
- Meteor-添加用户自定义字段的方法不起作用
- 骨干's Router.execute(callback,args,name)方法获取未定义的名称
- 在angularjs中创建自定义控件的推荐方法
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- React路由器错误-'无法调用方法'getRouteAtDepth'的未定义'
- 去掉多余的方法定义
- Javascript方法定义失败
- 属性定义是使用敲除时的方法定义
- Javascript:使用eclipse跳转到方法定义
- 使用以下两种方法定义的方法之间的差异
- 为什么函数属性定义在对象本身上(例如Function.name),而方法定义在Function.prototype上?
- ES6箭头函数和方法定义的区别
- 如果没有“函数”,这个对象方法定义如何工作?关键字
- 使用DOM方法定义文本框的动态宽度
- Javascript方法定义不一致
- 为什么实例方法定义在原型中,而实例字段定义在构造函数中?
- Reactjs最好的策略是为渲染方法定义一个变量
- 在JavaScript中:类中函数和方法定义之间的语法差异