JS public、private、protected 有什么区别呢?

在 JavaScript 中,尤其是在使用现代 JavaScript 类(ES6+)的上下文中,publicprivateprotected 是用来定义类成员(属性和方法)的访问控制级别的关键字。以下是它们的详细说明及区别:

1. Public(公开)

  • 定义public 是默认的访问控制修饰符,表示该成员可以在任何地方访问。
  • 访问方式:可以从类的内部、外部、子类及实例访问。
  • 表示方式:在 ES6 中,所有类的成员默认都是 public,并且在类中定义时没有特殊标记。
class Example {
    publicMethod() {
        console.log("This is a public method.");
    }
}

const example = new Example();
example.publicMethod(); // 可以访问

2. Private(私有)

  • 定义private 用于定义私有成员,这些成员只能在类的内部访问,外部(包括子类)无法访问。
  • 访问方式:只能在类的实例方法中访问,不能被类的外部代码或者子类访问。
  • 表示方式:在 ES2022 及其之后,使用 # 符号来定义私有属性和方法。
class Example {
    #privateMethod() {
        console.log("This is a private method.");
    }

    publicMethod() {
        this.#privateMethod(); // 可以访问
    }
}

const example = new Example();
example.publicMethod(); // 可以访问
// example.#privateMethod(); // 报错:无法访问私有方法

3. Protected(受保护的)

  • 定义:在 JavaScript 中,protected 并不是一个标准的访问修饰符,但在 TypeScript 和某些类库(如某些 ES6 的实现)中可以找到类似的概念。protected 成员可以在类内部和派生类中访问,但不能独立于这些类访问。
  • 访问方式:只能在类的内部或子类中访问,外部代码无法访问。
  • 表示方式:在 JavaScript 中没有直接的语法来实现 protected。实现受保护的成员通常是通过使用 _ 前缀(如 _protectedMethod())来约定,但这并不是真正的 protected 访问控制。
class Base {
    _protectedMethod() {
        console.log("This is a protected method.");
    }
}

class Derived extends Base {
    useProtectedMethod() {
        this._protectedMethod(); // 子类可以访问
    }
}

const derived = new Derived();
derived.useProtectedMethod(); // 可以访问
// derived._protectedMethod(); // 仍然无法从外部访问

总结

访问修饰符访问范围
Public任何地方(内部、外部、子类)
Private仅在类内部, 可以通过公共方法访问
Protected仅在类内部和派生类内部

在 JavaScript 中,publicprivate 是直接支持的,而 protected 采用约定形式实现,通常依赖于命名约定。使用这些访问修饰符可以帮助更好地封装代码、隐藏实现细节以及提高数据安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值