有没有理由将声明函数重构为表达式函数?

时间:2016-08-08 11:46:49

标签: javascript function refactoring

我有这三个函数,它们是不同的但是它们都发生在相同的上下文中,它们是相关的,因此它们在公共区域中有一些组件(例如:类名)。

function btnSubmitLoading($btn, cleanError, classToRemove) {
    // 5-10 lines of code
}

function btnSubmitComplete($btn, classToAdd) {
    // other 5-10 lines of code
}

function btnFeedback($btn, $msg, classToAdd) {
    // more 5-10 lines of code
}

它们在$(document).ready()之前声明,因此它们是全局的并在不同的页面中调用。当我需要其中一个时:

btnFeedback($('button'), 'success', 'fa-check');

我的问题是,如果有任何理由将这些函数转换为表达式函数,会产生如下结果:

var ButtonSubmit = function() {

    this.btnSubmitLoading = function($btn, cleanError, classToRemove) {
        // 5-10 lines of code
    }

    this.btnSubmitComplete = function($btn, classToAdd) {
         // other 5-10 lines of code
    }

    this.btnFeedback = function($btn, $msg) {
        // more 5-10 lines of code
    }
}

称之为:

btnFancy = new ButtonSubmit();

当我需要它时:

btnFancy.btnFeedback($('button'), 'success', 'fa-check');

我一直在学习表达式/声明函数和闭包/原型,但我仍然不明白我应该在哪里应用它们。

感谢。

1 个答案:

答案 0 :(得分:1)

由于你的ButtonSubmit类/构造函数没有真正做任何事情,这是毫无意义的。至少你想用它来简化对象的使用:

let btnFancy = new ButtonSubmit($('button'));
btnFancy.feedback('success', 'fa-check');

(我不知道这是否对您的用例有任何意义。)

你可以这样实现:

function ButtonSubmit(button) {
    this.button = button;
}

ButtonSubmit.prototype.submitLoading = function (cleanError, classToRemove) {
    this.button....
    // 5-10 lines of code
}

ButtonSubmit.prototype.submitComplete = function (classToAdd) {
    this.button....
    // 5-10 lines of code
}

ButtonSubmit.prototype.feedback = function ($msg) {
    this.button....
    // 5-10 lines of code
}

如果这对您没有多大意义,并且您只想命名函数,则不需要函数或new

let btn = {
    submitLoading: function ($btn, cleanError, classToRemove) {
        // 5-10 lines of code
    }
    submitComplete: function ($btn, classToAdd) {
        // other 5-10 lines of code
    },
    feedback: function ($btn, $msg, classToAdd) {
        // more 5-10 lines of code
    }
}

btn.feedback($('button'), ...);