前端js的书写规范和高效维护的方案_自我总结使用的方案

简介:   作为程序员,人生最值得幸福的事有几件:解决困扰了很长时间的问题升职加薪找个漂亮又靠谱的对象深得领导的喜欢带领团队冲锋陷阵 ...  哈哈,这些都是梦想,暂时想想就好了。这肯定和我说的东西不符合嘛,大家表多想了。

  作为程序员,人生最值得幸福的事有几件:

  1. 解决困扰了很长时间的问题
  2. 升职加薪
  3. 找个漂亮又靠谱的对象
  4. 深得领导的喜欢
  5. 带领团队冲锋陷阵
  6.  ...

  哈哈,这些都是梦想,暂时想想就好了。这肯定和我说的东西不符合嘛,大家表多想了。下面进入正题把:

  不管你在小公司,创业型公司,ABCD轮的公司,哪怕在bat,再叼一点的就是全球的google,facebook等,我们正常进去都不会让你去单独做一个东西,而是首先的任务就是维护别人的代码,对的,没错,你没听错,维护别人的代码!!!(卧槽,哪个sb写的代码,骂了个蛋........)

  因为我也是程序员,我懂咱们的感受,不管前端后端都一样。对于菜鸟来说,会抱怨一下,哪个大婶写的代码,太牛逼了。我一行没看懂,太牛叉了,这下面怎么写呢;对于稍微有点道道的程序员,会饱含一些谦虚的态度,这边写的不错,那边写的不好,还差一点,要动手改一下,可是又想了想,万一改崩了怎么办,所以一直处在这种纠结状态;最后对于那些牛叉的人,上来就是一句:我草拟大爷,哪个sb写的代码,写的什么刁玩意,这TM还可以这样写,我勒个擦,这边还可以这样,我都跪了,神啊救救我把。

  当然,上面都是描述的我们去维护别人代码,暴露的千姿百态。我想按本心说,谁都不想去维护这样的代码,最然有时候现实都要去维护这样的代码。所以,有时候我们不知不觉也这样,不管后来来维护你代码的人。但是,作为一个负责任的程序员来说,都不应该这样的。所以能有个可以维护的代码,有一些规范,对于公司的代码管理和审核,还有后来的维护者都是一个很好的方式。

  我总结的规范,我也不知道别人知否这样总结过,所以我就先把这套前端js书写的格式和规范书写下来,大家一起参考参考。

  依赖的一些原则和规范:

    • 原子思想,即确认每个function就做一件事
    • 归纳思想,将同一类的操作,全部整合到一起
    • 方便维护,可以便于后来人进行快速维护
    • 方便拓展,即可以根据每个不同的项目进行不同的更改
    • 通用前端设计模式,一些前端可以通用的设计模式

  代码如下:

/**
 * Created by gerry.zhong on 2016/10/11.
 */
(function(window){
    //创建一个独立的对象,注入所有的方法,包括你想抛出去和不想抛出去的
    var tool = {
        AAAA:function(){},
        BBBB:function(){
            console.log("我只想内部使用,不想给别人用");
        }
    };

    /*
    * 该对象承载所有需要抛出去的对象
    *   1.该对象中的方法可以自己写
    *   2.该对象中的方法可以注入(例子中的tempObj.tool.AA)
    *   3.该对象也可以选择性抛出给使用者需要的方法,也可以隐藏(tool.BBBB)
    * */
    var tempObj ={
        //reader为一些初始化需要的操作,有时候会有注册事件等,或者一些预操作
        reader:function(){
        },
        //注入所有的选择器,方便选择器变化,直接修改该对象中的选择器,而不需要全局去更改
        selector:{
            mySelector:"#mySelector",  //原密码
        },
        //注入所有的接口地址,方便接口变化可以进行,快速变更,不需要全局找引用的对象
        interface:{
            loginUrl:"",
        },
        //注入page中所有的事件,统一管理,建议命名规范:事件_命名,例 click_login
        registerEle:{
            click_login:function(){
                //注册单击事件
            }
        },
        //注入所有ajax请求,页面所有请求,将在这里统一管理,建议命名规范:ajax_命名,例 ajax_login
        /*
        * 该请求中有2种方案,看需求使用
        *  1.不公用一个请求方案
        *  2.公用一个请求,但是回调处理不一样
        * */
        ajaxRequest:{
            //不公用一个请求方案
            ajax_login:function(){
                $.post("","",function(data){
                    tempObj.callback.call_login(data);
                });
            },
            //会有多个业务公用这个请求
            ajax_login_T:function(callback){
                //所有接口地址从interface中获取,callback中tempObj.callback中处理
                $.post("","",callback);
            },
        },
        //处理所有回调函数,针对一个请求,处理一个回调
        callback:{
            //不共用请求处理回调
            call_login:function(data){
                //处理回调
            },
            //公用请求处理回调
            call_login_T:function(){
                var temp = function(){

                };
                tempObj.ajaxRequest.ajax_login_T(temp);
            }
        },
        //所有使用的工具类,如果每个项目都单独的unit.js或者common.js等存放一些公共方法的,这里可以不使用
        // PS:这里存放的只是仅针对于这个页面处理的一些tool,一般没必要抛出去,不过看业务而定
        tool:{
            A:function(){
                console.log("我是自己写的方法");
            },
            AA:tool.AAAA,    //这是我想抛出去给别人用的东西
        },
        //临时缓存存放区域,仅针对本页面,如果跨页面请存放cookie或者localstorage等
        //主要解决有时候会使用页面控件display来缓存当前页面的一些数据
        temp:{

        },
        /*
        * 业务使用区域,针对每个特别的业务去串上面所有的一个个原子
        *   因为上面所有的方法,只是做一件事,这边可以根据业务进行串服务,很简单的
        * */
        firm:{

        }
    };
    /*
    * 闭包抛出去的方法
    * */
    var outputObj =function(){
        //首先执行reader方法,初始化一些操作,比如注册事件啥啥啥的
        tempObj.reader();
        /*
        * 抛出给别人使用的对象
        *   想给别人看和使用的东西,可以注入tempObj对象,就像tool中的AA的方式
        *   不想给别人看和使用的东西,就像内部tool对象中的BBBB方法,你内部可以使用,外部是无法引用的
        * */
        return tempObj;
    }

    //抛出你希望抛出去的对象,因为你掌控了所有,哈哈。
    window.gerry = new outputObj();
})(this);

  

这是我这些年,经历很多坑,自己也挖过坑,也填过很多坑,总结出来的东西,大家可以参考参考。反正我在项目中使用起来很方便,不会出现一个请求回调中会出现串了200行代码的玩意。关键是维护起来,很方便,看起来也很爽。

  • 如果修改事件,我就去事件中找我需要的事件,
  • 请求要修改,我就去我的请求中去修改,我要变化的请求,
  • 如果回调变了,我就去回调函数中去处理回调,
  • 选择器和接口,就直接去这2个对象中去修改,不需要全局去变化等

 

最主要的是,我控制了我自己写的所有代码,我想让你看什么,我想让你用什么,你就得听我的,这也是做一些原生插件和框架的思想。对自己的代码负责,控制自己的代码,这才是程序员玩的东西,做代码的主人,而不是被代码玩。

  PS:对于amd和cmd的写法当中也可以使用,最后抛出的对象,可以稍微变一下就好了,我这里只是针对原生写的,大家借鉴这个思想就好了

 

  github地址:https://github.com/GerryIsWarrior/jsSpecification       希望大家帮忙点颗星,这才是我最大的动力

 

目录
相关文章
|
1月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
24天前
|
JavaScript 前端开发 测试技术
在 golang 中执行 javascript 代码的方案详解
本文介绍了在 Golang 中执行 JavaScript 代码的四种方法:使用 `otto` 和 `goja` 嵌入式 JavaScript 引擎、通过 `os/exec` 调用 Node.js 外部进程以及使用 WebView 嵌入浏览器。每种方法都有其适用场景,如嵌入简单脚本、运行复杂 Node.js 脚本或在桌面应用中显示 Web 内容。
60 15
在 golang 中执行 javascript 代码的方案详解
|
1月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
17天前
|
存储 网络架构
Next.js 实战 (四):i18n 国际化的最优方案实践
这篇文章介绍了Next.js国际化方案,作者对比了网上常见的方案并提出了自己的需求:不破坏应用程序的目录结构和路由。文章推荐使用next-intl库来实现国际化,并提供了详细的安装步骤和代码示例。作者实现了国际化切换时不改变路由,并把当前语言的key存储到浏览器cookie中,使得刷新浏览器后语言不会失效。最后,文章总结了这种国际化方案的优势,并提供Github仓库链接供读者参考。
|
1月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
49 5
|
1月前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
75 1
|
1月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
52 4
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
135 1
|
1月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
45 0
|
2月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
194 2