随着 JavaScript 发展的越来越成熟,ECMAScript 2020(ES11)引入了一些新的特性,其中包括 private 和 protected 两个修饰符。这两个修饰符通常用于类的属性和方法,用来限制对它们的访问权限。
private 访问修饰符
private 修饰符用来限制类的内部成员的访问权限。使用这个修饰符后,只有在定义这个类的时候才能访问它,外部代码不能访问这些成员。在 JavaScript 中,我们并没有真正的私有成员,但是使用 private 修饰符可以模拟出私有成员。
-- -------------------- ---- ------- ----- ------- - ---------------- - -- ------ ----------------- -- - ------- --------- - -------------- - -- ------ ---------------------- -- -------- ----------------- -- - ------ --------- - - ----- --- - --- ---------- ------------------- -- ---- -- - ------- ------ -- ---- -- - ------ ------ --------------------- -- -------- ------------ ------- ----- ---------------- ---- -- -------- -- -- --------- -----
在这个示例中,我们定义了一个 MyClass 类,并在其中定义了一个私有方法 #privateMethod() 和一个公共方法 publicMethod()。通过使用 private 修饰符,我们限制了对 #privateMethod() 的访问权限,使得只有内部的 publicMethod() 可以访问到它。在外部代码中,我们使用 obj.#privateMethod() 尝试访问私有方法会导致语法错误。这是因为 #privateMethod() 只能在 MyClass 类的内部访问。
protected 访问修饰符
与 private 修饰符不同,protected 修饰符可以让派生类(子类)访问到类的内部成员,在外部代码中仍然是无法访问的。被 protected 修饰的成员可以被继承,也可以在派生类中被访问。
-- -------------------- ---- ------- ----- ------ - ----- - --- ----------------- - ---------- - ----- - ---------------- - -- ------ ------ ----- -- - ------- -------- - ----------------- - -- -------- ----------------------------------- ----------------- -------- ---- -- ---------------- - - ----- --- ------- ------ - ------- - ----------------------- -- ------------- --------------------- - - ----- --- - --- ------------ ------------ -- ---- -- - ------- ------ -- ---- -------- ---- -- ---- -- ----- ---------------------- -- -------- ---------- ------------------- -- --- - --------
在这个示例中,我们定义了一个 Animal 类,并在其中定义了一个私有属性 #name 和一个私有方法 #privateMethod(),以及一个受保护的方法 protectedMethod()。接着,我们定义了一个 Dog 类并从 Animal 类继承,然后在其中定义了一个 speak() 方法。在 speak() 方法中,我们使用 this.protectedMethod() 来调用父类 Animal 中定义的 protectedMethod() 方法,输出了该方法的内部信息。
总结
通过 private 和 protected 修饰符,我们可以更好地控制类的成员的访问权限。使用 private 修饰符可以模拟出类的私有成员,在内部进行访问和修改,在外部代码中无法访问。而 protected 修饰符则允许派生类(子类)访问到类的受保护成员,使得派生类可以继承和重载这些成员。了解这两个访问修饰符的使用方法可以让我们更好地封装类的内部实现,提高代码的可读性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64d46792b5eee0b525bf566a