JavaScript重构技巧—对象和值

JavaScript 是一种易于学习的编程语言,编写运行并执行某些操作的程序很容易。然而,要编写一段干净的JavaScript 代码是很困难的。

10年的杨浦网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整杨浦建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“杨浦网站设计”,“杨浦网站推广”以来,每个客户项目都认真落实执行。

在本文中,我们将介绍一些优化 JS 类和对象的重构思路。

用常量来表示数字

如果我们有很多重复的值且表示一样的含义,但没有明确地说明,那么我们应该将它们转换为常量,以便每个人都知道它们的含义,并且如果需要更改,我们只需更改一个地方就行了。

例如我们可能会这样写代码:

 
 
 
 
  1. const getWeight = (mass) => mass * 9.81
  2. const potentialEnergy = (mass, height) => mass * height * 9.81

对于含义相同的数学我可以用常量表示:

 
 
 
 
  1. const GRAVITATIONAL_CONSTANT = 9.81;
  2. const getWeight = (mass) => mass * GRAVITATIONAL_CONSTANT
  3. const potentialEnergy = (mass, height) => mass * height * GRAVITATIONAL_CONSTANT

现在我们知道9.81实际上意味着GRAVITATIONAL_CONSTANT,我们不必重复自己。

上面我们用常量 GRAVITATIONAL_CONSTANT 表示 9.81 ,这样别人一看就知道它表示是万有引力常数常量。

封装字段

我们可以将getter和setter添加到类的字段中,这样就不心直接对类的字段进行操作。

例如我们可能会这样写代码:

 
 
 
 
  1. class Person {
  2.   constructor(name) {
  3.     this.name = name;
  4.   }
  5. }

如果要控制如何设置值,可以这样重构:

 
 
 
 
  1. class Person {
  2.   constructor(name) {
  3.     this._name = name
  4.   }
  5.   get name() {
  6.     return this._name
  7.   }
  8.   set name() {
  9.     this._name = name
  10.   }
  11. }

这样,我们就可以控制如何设置值,因为我们可以在setter中放入代码来设置名称。我们还可以控制谁能获得名称,因为它是在getter中返回的。

用数组类代替字段

我们可以将字段替换为其自己的数据类,这样在记录数据中会有更强灵活性。

例如我们可能会这样写代码:

 
 
 
 
  1. class Person {
  2.   constructor(name, bloodGroup) {
  3.     this.name = name;
  4.     this.bloodGroup = bloodGroup;
  5.   }
  6. }
  7. const person = new Person('joe', 'a')

如果我们想扩充 bloodGroup (血型)的种类,我们可以把 bloodGroup 重构成一个类。

 
 
 
 
  1. class BloodGroup {
  2.   constructor(name) {
  3.     this.bloodGroup = name;
  4.   }
  5. }
  6. class Person {
  7.   constructor(name, bloodGroup) {
  8.     this.name = name;
  9.     this.bloodGroup = bloodGroup;
  10.   }
  11. }
  12. const bloodGroup = new BloodGroup('a');
  13. const person = new Person('joe', bloodGroup)

这样,我们就可以在bloodGroup字段中存储更多种类的数据。

用状态/策略替换类型代码

有时,我们可以根据对象的类型创建子类,而不是在类中使用类型字段。这样,我们就可以在它们自己的子类中拥有两个类不共享的更多成员。

例如我们可能会这样写代码:

 
 
 
 
  1. class Animal {
  2.   constructor (type) {
  3.     this.type = type
  4.   }
  5. }
  6. const cat = new Animal('cat')
  7. const dog = new Animal('dog')

我们可以根据 type 类型来重构对应的类:

 
 
 
 
  1. class Animal {
  2.   //...
  3. }
  4. class Cat extends Animal {
  5.   //...
  6. }
  7. class Dog extends Animal {
  8.   //...
  9. }
  10. const cat = new Cat();
  11. const dog = new Dog();

在上面的示例中,我们单独编写一个Animal类,而另外添加Cat和Dog类,它们是Animal类的子类。

这样我们可以 Cat 和 Dog 类中共享的属性保存在各自的类的,把共享的放在 Animal 类中。

分解条件表达式

我们可以将长的条件表达式分解为更小的条件表达式。

例如我们可能会这样写代码:

 
 
 
 
  1. let ieIEMac = navigator.userAgent.toLowerCase().includes("mac") && navigator.userAgent.toLowerCase().includes("ie")

我们可以这样重构它:

 
 
 
 
  1. let userAgent = navigator.userAgent.toLowerCase();
  2. let isMac = userAgent.includes("mac");
  3. let isIE = userAgent.toLowerCase().includes("ie");
  4. let isMacisMacIE = isMac && isIE;

我们将冗长又难懂的条件表达式分解多个短小表达式,这样会大大滴增加阅读性。

总结

如果我们有很多重复的值且表示一样的含义,但没有明确地说明,那么我们应该将它们转换为常量,以便每个人都知道它们的含义,并且如果需要更改,我们只需更改一个地方就行了。

为了更好控制类的属性,我们可以为它添加getter和setter方法。

如果我们有type字段,则可以用它们自己的子类替换它们。

最后,我们可以将长条件表达式分解为较小的条件表达式,以便于阅读和理解。

本文转载自微信公众号「大迁世界」,可以通过以下二维码关注。转载本文请联系大迁世界公众号。

新闻名称:JavaScript重构技巧—对象和值
地址分享:http://www.mswzjz.cn/qtweb/news7/234957.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能