前言
最近在写 egg 的拦截器,定义了一些 session
需要私有属性,于是在 TypeSctipt 的环境中下意识地敲了private
不过这当然是假的私有:
class A {
public a = 1
private b = 2
}
⬇️(target: ES2015)
"use strict";
class A {
constructor() {
this.a = 1;
this.b = 2;
}
}
a 和 b 没有毛线不同。
解决
怎么才能写真正的私有呢?
在哥们
的帮助下,写出了这玩意:
class A {
public a = 1
#b = 2
}
⬇️(target: ES2015)
"use strict";
var _A_b;
class A {
constructor() {
this.a = 1;
_A_b.set(this, 2);
}
}
_A_b = new WeakMap();
😯 ~
当我尝试在编辑器中访问私有的属性#b:
延伸
TC39 - proposal class fields:tc39.es/proposal-pr…
github 中的 TC39 class fields 提案:github.com/tc39/propos…
为何需要用 WeakMap 来实现 private:docs.google.com/presentatio…
为何不直接用 private 来修饰私有属性:github.com/tc39/propos…
V8:private and public fields:v8.dev/features/cl…