John Au-Yeung
来源:medium
译者:前端小智
点赞再看,养成习惯本文
GitHub
https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了不少个人文档,和教程资料。欢迎Star和完善,你们面试能够参照考点复习,但愿咱们一块儿有点东西。javascript
JavaScript 是一种易于学习的编程语言,编写运行并执行某些操做的程序很容易。然而,要编写一段干净的JavaScript 代码是很困难的。前端
在本文中,咱们将介绍一些优化 JS 类和对象的重构思路。java
若是咱们有不少重复的值且表示同样的含义,但没有明确地说明,那么咱们应该将它们转换为常量,以便每一个人都知道它们的含义,而且若是须要更改,咱们只需更改一个地方就好了。git
例如咱们可能会这样写代码:github
const getWeight = (mass) => mass * 9.81 const potentialEnergy = (mass, height) => mass * height * 9.81
对于含义相同的数学我能够用常量表示:面试
const GRAVITATIONAL_CONSTANT = 9.81; const getWeight = (mass) => mass * GRAVITATIONAL_CONSTANT const potentialEnergy = (mass, height) => mass * height * GRAVITATIONAL_CONSTANT
如今咱们知道9.8
1实际上意味着GRAVITATIONAL_CONSTANT,咱们没必要重复本身。编程
上面咱们用常量 GRAVITATIONAL_CONSTANT
表示 9.81
,这样别人一看就知道它表示是万有引力常数常量。数组
咱们能够将getter
和setter
添加到类的字段中,这样就不心直接对类的字段进行操做。微信
例如咱们可能会这样写代码:编程语言
class Person { constructor(name) { this.name = name; } }
若是要控制如何设置值,能够这样重构:
class Person { constructor(name) { this._name = name } get name() { return this._name } set name() { this._name = name } }
这样,咱们就能够控制如何设置值,由于咱们能够在setter
中放入代码来设置名称。咱们还能够控制谁能得到名称,由于它是在getter
中返回的。
咱们能够将字段替换为其本身的数据类,这样在记录数据中会有更强灵活性。
例如咱们可能会这样写代码:
class Person { constructor(name, bloodGroup) { this.name = name; this.bloodGroup = bloodGroup; } } const person = new Person('joe', 'a')
若是咱们想扩充 bloodGroup
(血型)的种类,咱们能够把 bloodGroup
重构成一个类。
class BloodGroup { constructor(name) { this.bloodGroup = name; } } class Person { constructor(name, bloodGroup) { this.name = name; this.bloodGroup = bloodGroup; } } const bloodGroup = new BloodGroup('a'); const person = new Person('joe', bloodGroup)
这样,咱们就能够在bloodGroup
字段中存储更多种类的数据。
有时,咱们能够根据对象的类型建立子类,而不是在类中使用类型字段。这样,咱们就能够在它们本身的子类中拥有两个类不共享的更多成员。
例如咱们可能会这样写代码:
class Animal { constructor (type) { this.type = type } } const cat = new Animal('cat') const dog = new Animal('dog')
咱们能够根据 type
类型来重构对应的类:
class Animal { //... } class Cat extends Animal { //... } class Dog extends Animal { //... } const cat = new Cat(); const dog = new Dog();
在上面的示例中,咱们单独编写一个Animal
类,而另外添加Cat
和Dog
类,它们是Animal
类的子类。
这样咱们能够 Cat
和 Dog
类中共享的属性保存在各自的类的,把共享的放在 Animal
类中。
咱们能够将长的条件表达式分解为更小的条件表达式。
例如咱们可能会这样写代码:
let ieIEMac = navigator.userAgent.toLowerCase().includes("mac") && navigator.userAgent.toLowerCase().includes("ie")
咱们能够这样重构它:
let userAgent = navigator.userAgent.toLowerCase(); let isMac = userAgent.includes("mac"); let isIE = userAgent.toLowerCase().includes("ie"); let isMacIE = isMac && isIE;
咱们将冗长又难懂的条件表达式分解多个短小表达式,这样会大大滴增长阅读性。
若是咱们有不少重复的值且表示同样的含义,但没有明确地说明,那么咱们应该将它们转换为常量,以便每一个人都知道它们的含义,而且若是须要更改,咱们只需更改一个地方就好了。
为了更好控制类的属性,咱们能够为它添加getter
和setter
方法。
若是咱们有type
字段,则能够用它们本身的子类替换它们。
最后,咱们能够将长条件表达式分解为较小的条件表达式,以便于阅读和理解。
代码部署后可能存在的BUG无法实时知道,过后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给你们推荐一个好用的BUG监控工具 Fundebug。
https://levelup.gitconnected....
文章每周持续更新,能够微信搜索「 大迁世界 」第一时间阅读和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 已经收录,整理了不少个人文档,欢迎Star和完善,你们面试能够参照考点复习,另外关注公众号,后台回复福利,便可看到福利,你懂的。