JavaScript优秀实践之改进类

开发 前端
使用默认参数和属性缩写,清理我们的JavaScript代码很容易。在本文中,我们将探讨创建类的优秀做法以及何时创建类。

 使用默认参数和属性缩写,清理我们的JavaScript代码很容易。

在本文中,我们将探讨创建类的优秀做法以及何时创建类。

[[324567]]

构造函数

为了让我们的构造函数更好地发挥作用,我们应该做一些事情。它们是:

如果可能的话,初始化所有构造函数中的所有成员数据

我们应该将它们全部放入构造函数中,以便在实例化对象时将它们全部初始化。

所以我们可以这样写:

 

  1. class Person { 
  2.   constructor(name) { 
  3.     if (this.instance) { 
  4.       this.instance = { 
  5.         name 
  6.       } 
  7.     } 
  8.     return this.instance; 
  9.   } 

现在我们确保所有的东西都用一个值初始化了。

在构造函数中创建一个单例

如果我们只需要一个构造函数的一个实例,那么我们可以创建一个实例。

例如,我们可以编写以下代码:

 

  1. class Person { 
  2.   constructor(name) { 
  3.     if (this.instance) { 
  4.       this.instance = { 
  5.         name 
  6.       } 
  7.     } 
  8.     return this.instance; 
  9.   } 

在上面的代码中,如果 this.instance 还没有定义,我们返回我们创建的对象。

否则,我们将返回设置为 this.instance 的任何内容。

优先使用深度拷贝而不是浅拷贝

深度拷贝会复制所有内容,因此比浅层复制要好得多,浅拷贝会留下一些引用原始对象的东西。

如果我们想要真正的副本,那就不好了。

因此,我们必须编写代码来制作深层副本,如下所示:

 

  1. const copy = obj => { 
  2.   const copied = { 
  3.     ...obj 
  4.   }; 
  5.   for (const k of Object.keys(obj)) { 
  6.     if (typeof obj[k] === 'object') { 
  7.       copied[k] = { 
  8.         ...copied[k] 
  9.       }; 
  10.       copy(copied[k]); 
  11.     } 
  12.   } 
  13.   return copied; 

如果发现嵌套对象,我们只使用扩展运算符来复制嵌套对象,并递归执行相同的操作。

然后,我们返回我们复制的对象。

我们什么时候应该创建一个类?

我们不应该总是创建类。在一些场景中,创建一个类是有意义的。

模拟现实世界的对象

类非常适合建模真实世界的对象,因为它们可以建模对象的行为。

它们允许我们将实例变量和方法封装到一个包中,分别存储状态和对对象执行操作。

建模抽象对象

同样,我们可以使用类对抽象对象进行建模。

它们可以用来进行抽象,抽象是对不同类型对象的概括。

类非常适合存放子类的共享成员,子类可以继承它们。

但是,我们应该保持继承树的简单性,这样人们就不会被代码弄糊涂了。

降低复杂度

我们可以使用类来降低程序的复杂性。

类非常适合隐藏信息。在JavaScript中,类中还没有私有变量,因此我们必须在方法中隐藏数据。

这样我们就可以最小化程序不同部分之间的耦合。

隐藏实现细节

方法也适合隐藏实现细节。

我们可以把细节隐藏在方法中,只运行需要的东西。

为此,我们可以在方法内部嵌套函数和变量。

限制变化的副作用

由于我们可以隐藏事物,因此可以减少更改的影响。

与隐藏实现一样,可以通过在方法内限制更改的影响来隔离更改的影响。

隐藏全局数据

通过将全局数据放入类的方法中,它们可以成为私有数据。

这样,他们就不必向公众公开。我们要做的就是使用 let 和 const 在方法中声明它们。

简化参数传递

如果我们将相同的参数传递给不同的函数,则可以将参数更改为实例变量,将函数更改为方法。

例如,如果我们有:

 

  1. const speak = (name) => `${name} spoke`; 
  2. const greet = (name) => `hi, ${name}`; 

然后,我们可以将方法放入自己的类中,如下所示:

 

  1. class Person { 
  2.   constructor(name) { 
  3.     this.name = name
  4.   } 
  5.   speak() { 
  6.     return `${this.name} spoke`; 
  7.   } 
  8.   greet() { 
  9.     return `hi, ${this.name}`; 
  10.   } 

现在,我们不必在任何地方传递 name。

我们只需要创建一个 Person 实例,并调用这些方法而无需传入任何参数。

总结

我们可以创建类来封装数据并将内容打包在一起。但是,我们不应该为所有内容创建类。

另外,我们应该尽可能深拷贝而不是浅拷贝。

责任编辑:华轩 来源: 今日头条
相关推荐

2024-04-11 10:20:57

JavaScript前端Web

2021-03-11 14:33:28

Kubernetes开源容器

2022-02-23 09:03:29

JavaScript开发命名约定

2023-10-10 10:57:12

JavaScript代码优化

2022-11-28 23:48:06

JavaScript编程语言技巧

2021-05-26 08:50:37

JavaScript代码重构函数

2020-02-25 15:27:37

JavaScriptTypeScript浏览器

2020-04-28 16:12:50

前端JavaScript代码

2023-12-08 14:50:45

Python枚举类工具

2022-01-21 13:53:29

云计算边缘计算数据

2022-11-30 10:34:17

2020-03-27 22:18:55

JavaScript编程语言代码

2023-02-07 15:33:16

云迁移数据中心云计算

2020-05-25 11:14:59

代码程序开发

2022-07-21 08:03:15

云安全漏洞修复

2023-06-19 11:49:03

2022-04-19 10:17:20

云迁移云原生可观测

2020-02-25 20:55:20

JavaScript开发 技巧

2020-08-25 10:14:59

JavaScript开发 技巧

2019-12-03 09:32:32

JavaScript代码开发
点赞
收藏

51CTO技术栈公众号