es6 Class 的私有属性

Class 的私有属性

与私有方法一样,ES6 不支持私有属性。目前,有一个提案,为class加了私有属性。方法是在属性名之前,使用#表示。

 
 
  1. class Point {
  2. #x;
  3. constructor(x = 0) {
  4. #x = +x; // 写成 this.#x 亦可
  5. }
  6. get x() { return #x }
  7. set x(value) { #x = +value }
  8. }

上面代码中,#x就表示私有属性x,在Point类之外是读取不到这个属性的。还可以看到,私有属性与实例的属性是可以同名的(比如,#xget x())。

私有属性可以指定初始值,在构造函数执行时进行初始化。

 
 
  1. class Point {
  2. #x = 0;
  3. constructor() {
  4. #x; // 0
  5. }
  6. }

之所以要引入一个新的前缀#表示私有属性,而没有采用private关键字,是因为 JavaScript 是一门动态语言,使用独立的符号似乎是唯一的可靠方法,能够准确地区分一种属性是否为私有属性。另外,Ruby 语言使用@表示私有属性,ES6 没有用这个符号而使用#,是因为@已经被留给了 Decorator。

该提案只规定了私有属性的写法。但是,很自然地,它也可以用来写私有方法。

 
 
  1. class Foo {
  2. #a;
  3. #b;
  4. #sum() { return #a + #b; }
  5. printSum() { console.log(#sum()); }
  6. constructor(a, b) { #a = a; #b = b; }
  7. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值