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