在 ES6 中引入了 class 关键字来定义类,而 init 方法被用来代替了传统的构造函数。ES11 引入了新的语法支持直接声明构造函数,这样解决了类 init 方法和构造函数的区别问题。
传统构造函数与 ES6 中的 init 方法
在 ES6 中,类定义如下:
-- -------------------- ---- ------- ----- ------ - ----------------- ---- - --------- - ----- -------- - ---- - ------ - --------------- ---- -- ------------- --- ----------- ----- ------- - -
在该定义中,constructor 用于初始化对象的实例成员,而 init 方法可以在类的实例上直接调用,用于执行每次创建对象时的初始化操作。
类构造函数的定义
ES11 中引入了直接在类声明上定义构造函数的语法,如下所示:
-- -------------------- ---- ------- ----- ------ - ----- ---- ----------------- ---- - --------- - ----- -------- - ---- - ---------- - ------------------- -- ---- -- ---------------- - -
与 ES6 中的定义相比,该语法允许我们在类定义上直接声明构造函数,而不需要在类定义中引入 init 方法。
类构造函数与实例构造函数
需要注意的是,在 ES6 中,init 方法被称为“实例构造函数”,该方法只能在类的实例上调用。而在 ES11 中,类定义上的构造函数被称为“类构造函数”,该方法只能在类定义上调用。
实例代码
下面是使用类构造函数和实例构造函数的示例代码,代码中定义了一个名为 Person 的类,用于描述一个人的基本信息。其中类构造函数定义了 name 和 age 属性,实例构造函数定义了 sayHello 方法。
-- -------------------- ---- ------- ----- ------ - ----- ---- ----------------- ---- - --------- - ----- -------- - ---- - ---------- - ------------------- -- ---- -- ---------------- - ------ ------- - --------------- --------- - - ----- ------- - --- --------------- ---- --------------- ------------------- ----- ------- - --- ------------- ---- -------------------
总结
ES11 中引入的直接声明类构造函数的语法可以使类定义更加清晰明了,同时也避免了类实例构造函数和类构造函数之间的混淆。这种语法的引入对于前端开发者来说具有重要的指导意义,可以提高代码的可读性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6596ac12eb4cecbf2da74a86