首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有理由将声明函数重构为表达式函数?

是否有理由将声明函数重构为表达式函数?
EN

Stack Overflow用户
提问于 2016-08-08 19:46:49
回答 1查看 42关注 0票数 0

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

代码语言:javascript
运行
复制
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()之前声明,因此它们是全局的,并在不同的页面中调用。当我需要其中一个的时候:

代码语言:javascript
运行
复制
btnFeedback($('button'), 'success', 'fa-check');

我这里的问题是,是否有任何理由将这些函数转换为表达式函数,导致如下所示:

代码语言:javascript
运行
复制
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
    }
}

就叫它:

代码语言:javascript
运行
复制
btnFancy = new ButtonSubmit();

当我需要它的时候:

代码语言:javascript
运行
复制
btnFancy.btnFeedback($('button'), 'success', 'fa-check');

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-08 21:29:59

因为您的ButtonSubmit类/构造函数实际上并不做任何事情,所以这是没有意义的。至少你应该使用它来简化你对对象的使用,如下所示:

代码语言:javascript
运行
复制
let btnFancy = new ButtonSubmit($('button'));
btnFancy.feedback('success', 'fa-check');

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

你可以像这样实现它:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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'), ...);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38828417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档