js中的class
-
类写法
class SuperClass { constructor(option) { this.a = option; } fn() { console.log(this.b); } static staticMethod() { console.log("静态方法只能通过类调用") } set sa(value){ this.a = value; } get sa() { return this.a; } } class SubClass extends SuperClass { constructor(option) { super(option.a); // 调用父类的构造函数 this.b = option.b } } const sub = new SubClass({a: "aaa", b: "bbb"}); sub.sa = "aa" console.log(sub.sa); // aa sub.fn(); // bbb SubClass.staticMethod(); // 静态方法只能通过类调用
-
处理private数据
方式一:使用Symbols symbol是唯一的并且是不可变的数据类型 class Demo { constructor(option) { const key = Symbol("key"); this[key] = option; this.fn = () => { console.log(this[key]) } } } const demo = new Demo("aaa"); console.log(demo[Symbol("key")]); // undefined demo.fn(); // aaa 方式二:使用WeakMaps WeakMaps键名是弱引用类型,键值可以是任意类型 如果键没有被其他强类型引用,会自动被垃圾回收掉 const key = new WeakMap(); class Demo { constructor(option) { key.set(this, option); this.fn = () => { console.log(key.get(this)) } } } const demo = new Demo("aaa"); console.log(key.get[demo]); // undefined demo.fn(); // aaa