JavaScript重构(四):JavaScript编码规则

没有规矩,不成方圆,JavaScript带来了灵活性,也带来了不受控的变量和访问,所以要用规则限制它。一支成熟的团队,还是一支新鲜的团队,规则应当是不一样的,我只是列出一些常见的或者有效的办法,来约束跳跃的开发人员,思维可以任意飞跃,代码却要持续受控。当然,任何规则都是建立在一定的认知基础之上的,面向对象JavaScript的基础是必备的,否则一切无从谈起。

 

变量和方法控制:

模块开发不允许存放独立的全局变量、全局方法,只允许把变量和方法放置到相应模块的“命名空间”中,对此的解释请参见此文。实在心痒了,那么使用匿名函数如何?

(function() { 
  var value = 'xxx'; 
  var func = function() {...}; 
})();

 

模块化需要严格控制住代码的区域性,这不仅仅是代码可维护性、可定制性的一方面,同时也让JavaScript引擎在属性和方法使用完毕后及时地回收掉。

不允许在模块代码中污染原生对象,例如

String.prototype.func = new function(){...}; 

 

如此的代码必须集中控制,例如统一放置在common.js中,严格保护起来。

 

数据存放约束:

普通变量、prototype变量和function变量分而治之,方法名一律大写开头,变量名还是遵从骆驼命名法如何:

function T(name){ 
  T.prototype._instance_number++; 
  this.name = name; 
  this.showName=function(){ 
    alert(this.name); 
  } 
}; 
T.prototype = { 
  _instance_number:0, 
  getInstanceNum: function(){ 
    return T.prototype._instance_number; 
  } 
}; 

var t = new T("PortalONE"); 
t.showName(); 
new T("Again"); 
alert(t.getInstanceNum()); //打印:2

 

这里有意做了一件事情,T内部的属性和私有方法使用下划线开头,这样很好地实现了封装(上述代码中如果使用t.instanceNum,是无法访问到这个值的),如果这段代码都看不懂的话,赶紧温习一下JavaScript的面向对象吧 :)。JavaScript中提供了闭包和原型两种办法来实现继承和多态,关于重构中应用这一点,后续的章节我再啰嗦吧。

另外,优先使用JavaScript的原生对象和容器,比如Array,Ajax的数据类型统一切到JSON上来,尽量不要使用隐藏域;另外,通常是不允许随意扩展DOM对象的。

 

利用闭包特性,这一点可以做得更优雅:

var User = function(){
    var name;
    this.setName = function(newName){
        name = newName;
    };
    this.getName = function(){
        return name;
    };
};

访问的时候具备如下封装效果:

var user = new User();
user.setName("abc");
alert(user.getName()); //abc
alert(user.name);         //undefined

 

至于模块间的通信:模块间的通信意味着模块间的耦合性,是需要严格避免的;通信的途径通常使用方法级属性或者模块级的prototype变量。

 

DOM操纵规则:

在模块代码中,通常要求把对DOM的操纵独立到模块js中,应当避免在DOM模型上显示地写时间触发函数,例如:

<div onclick="xxx" />

借助JQuery基于bind的一系列方法,把行为逻辑独立出来以后,完全可以看到清爽的HTML标签。

DOM对象的访问通常使用id来查找,偶有根据name来查找的,过多次数地、不合理地遍历DOM树是前端性能保持的大忌。

 

CSS的样式控制:

(1)尽量拒绝style="xxx"的写法,主要目的是将样式统一到主题样式表单中,当然主题样式表单也是按模块存放的,对于不同语种的定制和不同风格的切换带来便利。

(2)规约JavaScript对样式的操纵,理想状况下,封装性好的UI可以自由地替换它的样式集合。

 

以上只能算冰山一角,抛砖引玉,实际项目中需要在开发过程中逐步细化和完善。

 

文章系本人原创,转载请注明作者和出处

Unity Addressable资源缓存路径自定义指南:告别C盘爆满烦恼 本文详细介绍了如何自定义Unity Addressable系统的资源缓存路径,解决其默认存储在C盘导致的磁盘空间不足问题。通过配置CacheInitializationSettings并编写编辑器脚本,开发者可以将缓存迁移至项目目录,实现资源的集中管理,提升团队协作效率与开发环境一致性。 阅读详情

相关推荐

LuaJit分析(十一)去除string.dump函数

因此即使我们的指令顺序被打乱,通过loadfile系统调用,再通过string.dump调用,可以得到字节码文件,再通过与标准的luajit生成的字节码文件比对,即可找出差异所在。Lua脚本中的string.dump函数用于生成字节码文件,根据对 luajit -b命令的分析可以得出,最终dump出字节码文件都是使用的string.dump函数。同时lj_libdef.h和lj_ffdef.h这两个文件都是自动生成的,在msvcbuild.bat中,使用如下命令生成。

a545958498的博客 1133

javaScript 重构

这篇文章主要介绍“JavaScript中如何重构代码”的相关知识,综合汇总,通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强。

a520bcd的博客 531

Simplicity Studio V5与EFR32BG22蓝牙开发环境实战指南

本文详细介绍了Simplicity Studio V5集成开发环境与EFR32BG22蓝牙芯片的开发实战指南。内容涵盖开发环境安装、SDK配置、项目创建、调试烧录、外设驱动集成及常见问题解决方案,帮助开发者快速上手物联网蓝牙应用开发,并充分利用EFR32BG22的低功耗与高集成度特性。

v5w6x的博客 320

JavaScript 代码优化重构

我们先引入一句话:代码主要是为了写给人看的,而不是写给机器看的,只是顺便也能用机器执行而已。代码和语言文字一样是为了表达思想、记载信息,所以写得清楚能更有效地表达。本文多数总结自《重构:改善既有代码的设计(第2版)》

hmhmhm0319的博客 512

ESP32 CAM使用教程(入门级)

串口被占用,可以关闭其他使用到串口的界面;先将手机也连上wifi,然后使用手机浏览器打开这个IP地址,注意手机连接的wifi需要和开发板的wifi一致,也就是程序里自己修改的那个wifi,否则无法打开IP地址;将开发板连接到电脑,点击点击工具→端口,然后选择自己实际接的COM口,不清楚COM口的可以打开电脑设备管理器查看一下,插拔设备看看哪个COM口会刷新就是哪个COM口;安装好esp32库之后,点击工具→开发板→esp32→AI Thinker ESP32-CAM,型号要仔细找找,不要选错了;

qq_34426854的博客 2万+

从Protocol到硬件控制:揭秘高通UEFI中ABL与XBL的协作机制

本文深入解析了高通UEFI架构中ABL与XBL的协作机制,重点探讨了Protocol通信在硬件控制中的关键作用。通过对比传统GPIO控制方式,揭示了Protocol架构在安全性、可维护性和灵活性方面的优势,并提供了关机充电场景的实战案例分析及调试技巧。

weixin_29185199的博客 431

JavaScript重构(汇总帖)

前一阵集中一段时间做了JavaScript的重构,留下了一点点脚印,在这里汇总一下。如果您对这一专题感兴趣,或者希望补充一些内容,欢迎留言,我会在后续更新进去。谢谢。   JavaScript重构(一):模块划分和命名空间 模块划分是JavaScript重构的原则之一,也是

四火专栏 2631

搭建ROS小车真的难吗?

搭建ROS小车真的难吗?不难 1.引言 本着为大家谋福利的心态,根据自己以往的开发经验,打算写一个从零开始制作一个可以实现地图构建和导航的ROS小车。目前某宝上面有很多现成产品,但是我个人认为,一个好的移动机器人开发工程师,应该对机器人的整个流程都能具备维护的能力,然后再深入研究其中一个方向即可。看到网上很少有整个系列的开发教程,看到同学们大多东拼西凑,浪费了不少时间。我就想着利用空余时间,将我本人的开发过程输出给大家。有基础理论、有实际工程代码、有丰富的学习资料,尽最大努力帮大家进入移动机器人的大门。 国

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

js3-mode:一款兼容多种风格的JavaScript编辑模式

js3-mode:一款兼容多种风格的JavaScript编辑模式 在现代Web开发中,JavaScript作为核心技术之一,其开发效率和代码质量的重要性不言而喻。emacs编辑器作为一个历史悠久且功能强大的文本编辑器,拥有许多扩展插件来提高编程效率。今天,我们要介绍一款名为js3-mode的emacs插件,它不仅支持多种JavaScript编码风格,还特别兼容npm风格。 项目介绍 js3-mod...

gitblog_00460的博客 1035

深度学习100例-卷积神经网络(CNN)彩色图片分类 | 第2天

文章目录前期工作设置GPU导入数据标准化可视化构建CNN网络编译训练模型预测模型评估 前期工作 设置GPU 如果使用的是CPU可以忽略这步 import tensorflow as tf gpus = tf.config.list_physical_devices("GPU") if gpus: gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPU tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量

“365天深度学习训练营”报名进行中~ 7855

有道龙虾LobsterAI vs. OpenClaw:对比与安装部署攻略

LobsterAI是"中国版OpenClaw",更注重易用性和中文场景适配;OpenClaw是技术极客的玩具,需要大量命令行操作。

lpfasd123的博客 2397

JavaScript重构(三):JavaScript的测试

进行JavaScript重构时,我希望引入易于使用的测试框架来保证重构的顺利进行,未来能持续通过测试代码对JavaScript逻辑的正确性做保障。 JsUnit (http://sourceforge.net/projects/jsunit/,http://www.jsunit.net/) JsUnit是一个独立的JavaScript单元测试框架,和JUnit差不多,没有上手难度,包括传统的setUp和tearDown,提供的assert方法也和JUnit类似,多了assertNaN和assertUnd

四火专栏 7112

游戏大厂技术护城河——为什么你抄不了原神?

│ │ │ │ ↓ 通过 │ │ │ │。│ │ │ │ ↓ 成功 │ │ │ │。│ │ │ │ ↓ 完成 │ │ │ │。│ │ │ │ ↓ 达标 │ │ │ │。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 71

重构javascript_javascript重构初学者指南

重构javascriptWhen you’re first starting out in your coding journey, building a web page/application seems so far out of reach. When you finally feel ready to create you very first app, your main priori...

weixin_26717681的博客 449

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

javascript 编码_7种javascript编码标准以提高可读性

javascript 编码 重点 (Top highlight)Coding standards can help with the below: 编码标准可以帮助以下方面: Keeps the code consistent 保持代码一致 Easier to read and understand 易于阅读和理解 Easier to maintainer 易于维护 Easier to refa...

weixin_26735933的博客 589

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

基于规则架构风格对业务的重构

本文探讨了基于规则的架构风格在业务系统中的应用,通过将业务逻辑从代码中抽离为独立规则文件,提高系统可维护性。文章介绍了Java和Python生态中的主流规则引擎,重点分析了ZEN Engine这一跨平台开源规则引擎的特点。ZEN Engine采用JSON格式定义规则,支持Python/Go/NodeJS集成,通过案例演示了如何实现电商折扣规则管理。文章指出这种方案相比硬编码方式更符合开闭原则,能有效应对频繁变化的业务需求,同时提供了ZEN Engine的实践指南和官方资源参考。

weixin_45809780的博客 948

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

javascript-style-guide :Airbnb JavaScript 编码规范

#javascript-style-guide :Airbnb JavaScript 编码规范 在当今的软件开发领域,JavaScript 已成为构建动态网站和应用程序的基石。为了确保代码的可读性、可维护性和一致性,制定一套统一的编码规范至关重要。Airbnb 的 JavaScript 编码规范正是为了这一目标而诞生,它提供了一套合理的编码实践,适用于所有的 JavaScript 开发者。 项目介...

gitblog_00439的博客 1112

15个可提升编码技能的JavaScript工具

JavaScript库是一些预先编写好的JavaScript文件集合,用来让 JavaScript应用开发更加便捷,尤其是AJAX和其他web开发。JavaScript的最主要用途是编写HTML中嵌入的函数,对页面的 DOM(Document Object Model)进行操作。本文中我们整理了 15  个JavaScript工具,来帮助你提高编码技能,更快、更轻松地完成工作。以下JavaScri...

qq_42485526的博客 301

推荐文章:探索代码重构的新境界 —— JS CodeFormer

推荐文章:探索代码重构的新境界 —— JS CodeFormer 随着前端开发的日益复杂化,高效的代码重构工具已成为开发者不可或缺的伙伴。今天,我们向您隆重推荐【JS CodeFormer】—— 前端代码重构领域的新生力量,源于JS Refactor的精髓,超越其前辈,以其卓越的性能和广泛的支持范围,等待每一位追求编码效率与质量的开发者。 项目介绍 JS Refactor,在经历了一段辉煌的历史后...

gitblog_00581的博客 548

js-assistant:为JavaScript开发者带来超120项代码增强功能

js-assistant:为JavaScript开发者带来超120项代码增强功能 在现代Web开发中,JavaScript、TypeScript、React 和 Vue.js 构成了前端开发的核心技术栈。而为了提高开发效率和代码质量,拥有一款功能强大的代码辅助工具是必不可少的。今天,我将向您推荐一个开源项目——js-assistant,它为Visual Studio Code编辑器增加了超过120...

gitblog_00393的博客 1030

重构你的javascript代码

重构,对于每个开发者都至关重要,特别是对于那些需要进阶的高级程序员。根据二八理论,20%的重构方法,能解决80%的坏代码。笔者最近查阅较多js编码指南以及重新阅读了《代码整洁之道》、《重构:改善既有代码的设计》两本经典书籍(强烈建议每隔一段时间看,每次都有新体会),整理出以下几个要点,帮助大家以最小的记忆,重构大部分坏代码。如果想全面了解重构方式,可以看笔者整理的AI Javascript风格指南...

weixin_33788244的博客 311

css 重构_如何重构CSS –指南

编者注:本文是我们的代码优化系列的一部分,我们在其中探讨如何优化编码以提高效率,以期成为更好的编码人员。 如果我们要拥有可管理和优化的代码库,那么CSS重构就必须成为前端开发工作流程的重要组成部分。 重构CSS时,我们会清理并重新组织现有代码,而无需添加任何新功能或修复错误。 重构有助于防止CSS爆炸,提高代码的可读性和可重用性 , 并使CSS更时尚,更快速地执行 。 通常需要一段...

cune1359的博客 585

js2-refactor.el:提升JavaScript开发效率的Emacs插件

js2-refactor.el:提升JavaScript开发效率的Emacs插件 在现代的Web开发中,JavaScript作为主流的前端编程语言,其开发效率和代码质量尤为重要。Emacs作为一款强大的文本编辑器,其通过插件扩展功能的能力备受开发者喜爱。今天,我们将介绍一款名为js2-refactor.el的Emacs插件,它为JavaScript开发者在Emacs中提供了丰富的代码重构功能。 项...

gitblog_01043的博客 878

JS 的5个不良编码习惯

1.不要使用隐式类型转换 JavaScript是一种松散类型的语言。如果使用得当,这是一个好处,因为它给你带来了灵活性。 大多数运算符+-*/==(不包括===)在处理不同类型的操作数时会进行隐式转换。 语句if(condition){...},while(condition){...}隐式地将条件转换为布尔值。 下面的示例依赖于类型的隐式转换,这种有时候会让人感到很困惑: ...

此去经年的博客 127
上一篇: JavaScript重构(四):JavaScript编码规则
下一篇: 转:解剖JavaScript中的null和undefined
RayChase
博客等级 码龄20年 71粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值