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
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM