讲解一下JavaScript对象重构

JavaScript 是一种易于学习的编程语言,编写运行并执行某些操作的程序很容易。然而,要编写一段干净的JavaScript 代码是很困难的。在本文中,我们将介绍一些优化 JS 类和对象的重构思路。

用常量来表示数字

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

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

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.81实际上意味着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 isMacisMacIE = isMac && isIE;

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

总结

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

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

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

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

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/219473.html<

(0)
管理的头像管理
上一篇2025-04-14 03:18
下一篇 2025-04-14 03:20

相关推荐

  • 骨干网络体系结构能干什么?骨干网络体系结构的作用

    骨干网络体系结构是现代信息社会的“超级高速公路网”,它通过分层设计、冗余备份和智能调度,确保海量数据在全球范围内高速、稳定、安全地传输,是支撑云计算、物联网及人工智能应用的底层基石,想象一下,如果你把互联网比作一个巨大的城市交通系统,那么骨干网络就是连接各个城市的主干道和立交桥,没有它,你的每一次微信发送、每一……

    2026-06-18
    0
  • 高io数据库可以干什么用?高io数据库适合什么场景

    高IO数据库的核心价值在于通过极高的读写吞吐量,解决海量数据场景下的性能瓶颈,是支撑高并发交易、实时分析及大规模内容分发的关键基础设施,在数字化转型的深水区,数据不再仅仅是静态的记录,而是流动的资产,传统的机械硬盘或普通SSD早已无法满足现代应用对速度的极致追求,高IO(Input/Output)数据库,就是那……

    2026-06-18
    0
  • 高io服务器性能如何?高io服务器适合什么场景

    高IO服务器并非单纯指代某种硬件,而是指在随机读写、高并发连接及小文件处理场景下,具备极致IOPS(每秒输入输出操作次数)和低延迟特性的计算资源,它是支撑现代高并发应用稳定运行的核心基石,在2026年的数字化浪潮中,业务负载早已从简单的静态页面展示演变为复杂的实时数据处理,许多开发者在排查系统瓶颈时,往往忽略了……

    2026-06-18
    0
  • 隔离网络空间哪里便宜?国内隔离网络空间价格

    隔离网络空间并没有统一的“便宜”标准,其成本高度取决于物理隔离等级、带宽需求及安全合规要求,通常物理网闸方案初期投入较高但长期运维成本低,而逻辑隔离方案虽初期便宜但存在潜在安全风险,建议根据业务敏感度选择混合隔离架构以平衡成本与安全,在数字化时代,企业构建独立网络环境的需求日益增长,但“隔离网络空间哪里便宜”这……

    2026-06-18
    0
  • 骨干网络体系结构设备为何故障?常见原因有哪些

    骨干网络体系结构设备故障的核心原因通常归结为硬件老化、配置错误、物理链路中断及外部攻击四大类,其中电源模块失效与光模块性能衰减是占比最高的隐性故障源,骨干网作为数字经济的“大动脉”,其稳定性直接关乎国计民生,当核心路由器或交换机出现丢包、震荡甚至宕机时,运维人员往往面临巨大的压力,很多人第一反应是检查软件配置……

    2026-06-18
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注