js中的class

js中的class

  1. 类写法

    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(); // 静态方法只能通过类调用
    
  2. 处理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
    
原文地址:https://www.cnblogs.com/ye-hcj/p/10350581.html