javascript - 摆脱多余的方法定义

标签 javascript function oop optimization

我用于构建路由的每个 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。 目前我有四个几乎相同的方法定义,我正在寻找更优雅的方法。

我考虑过创建一个包含方法名称的数组,并使用关键参数将方法映射到它,但在循环中创建函数似乎不是一个好主意。我还需要这些方法与 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);
};

关于javascript - 摆脱多余的方法定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29169055/

相关文章:

javascript - 如何从 youtube api 获取值?

Javascript 对象属性值根据其显示方式而有所不同

php - 问题在 Wordpress 的简码内返回一个函数

javascript - Jquery 从函数中的 $.post() 返回值

java - 简单的 UML OOP 风格的软件规划工具?

javascript - 覆盖 Javascript 中的全局函数声明

javascript - 记住 Bootstrap 表中的页面大小

function - 在不调用 typescript 中的函数的情况下获取泛型函数的类型

oop - 迭代具有不同属性的子类

python - 我怎样才能简单地从现有实例继承方法?