在 ECMAScript 2015 中,我们看到了类的引入,这是一种非常强大的面向对象编程模型。然而,它有一个缺陷,那就是没有办法创建私有成员。在 ECMAScript 2018 中,我们终于可以使用私有字段和方法了。
什么是私有字段和方法?
私有字段和方法是指只能在类内部访问的成员。这些成员对于外部代码是不可见的,因此可以避免被误用或滥用。在 ECMAScript 2018 中,我们可以使用 #
符号来定义私有成员。
如何定义私有字段和方法?
在类内部,我们可以使用 #
符号来定义私有字段和方法。例如:
-- -------------------- ---- ------- ----- ------ - ----- - ----- ----- -- ---- ---- - --- -- ---- --------------------- - -- ---- ----- ----------- - --- --------------------- ------ ----------- - ---------- - -------------- - ------ --------------------------- - -
在上面的例子中,我们定义了两个私有字段 #name
和 #age
,以及一个私有方法 #calculateBirthYear()
。这些成员只能在类内部访问,外部代码无法访问它们。
如何访问私有字段和方法?
在类内部,我们可以直接访问私有字段和方法。例如:
-- -------------------- ---- ------- ----- ------ - ----- - ----- ----- -- ---- ---- - --- -- ---- --------------------- - -- ---- ----- ----------- - --- --------------------- ------ ----------- - ---------- - -------------- - ------ --------------------------- - --------- - ------ ----------- -- -------- - -
在上面的例子中,我们定义了一个 getName()
方法来访问私有字段 #name
。在方法内部,我们可以直接访问私有字段 #name
。
如何继承私有字段和方法?
在 ECMAScript 2018 中,我们可以使用 super
关键字来访问父类的私有字段和方法。例如:
-- -------------------- ---- ------- ----- ------ - ----- - ----- ----- -- ---- ---- - --- -- ---- --------------------- - -- ---- ----- ----------- - --- --------------------- ------ ----------- - ---------- - -------------- - ------ --------------------------- - --------- - ------ ----------- - - ----- ------- ------- ------ - ------ - -- -- ---- -------------------------- - -- ---- ----- ----------- - --- --------------------- ------ ----------- - --- - ------------- - ------------------- - ------ -------------------------------- - ---------------- - ------ ------------------- -- - ------- -- ----- ----------------- - -
在上面的例子中,我们定义了一个 Student
类继承自 Person
类。在 getStudentInfo()
方法中,我们使用 super.getName()
来访问父类的私有字段 #name
。
总结
在 ECMAScript 2018 中,我们可以使用 #
符号来定义私有字段和方法。这些成员只能在类内部访问,外部代码无法访问它们。我们可以直接访问私有字段和方法,在继承中使用 super
关键字来访问父类的私有成员。私有字段和方法可以帮助我们更好地封装类的实现细节,防止被误用或滥用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65132a8b95b1f8cacdba1c95