wrapMethods(){
        let descWidth = Object.getOwnPropertyDescriptor(HTMLCanvasElement.prototype,'width')
        let newDescWidth = {
            configurable: descWidth.configurable, enumerable: descWidth.enumerable,
            get:descWidth.get, 
            set:(v)=>{ descWidth.set.apply(this,[v]); this.flush(); },
        }
        Object.defineProperty(this,'width',newDescWidth)
        let descHeight = Object.getOwnPropertyDescriptor(HTMLCanvasElement.prototype,'height')
        let newDescHeight = {
            configurable: descHeight.configurable, enumerable: descHeight.enumerable,
            get:descHeight.get, 
            set:(v)=>{ descHeight.set.apply(this,[v]); this.flush(); },
        }
        Object.defineProperty(this,'height',newDescHeight)
        
    }
그냥 setter, getter 에 선언해도 되긴 된다.
성능 이슈가 있을 것 같지만...
    get width(){       
        const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.constructor).prototype,'width');
        return desc.get.apply(this); 
    }
    /**
     * @param {number} v
     */
    set width(v){
        const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.constructor).prototype,'width');
        desc.set.apply(this,[v]); 
        this.flush(); 
    }
    get height(){       
        const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.constructor).prototype,'height');
        return desc.get.apply(this); 
    }
    /**
     * @param {number} v
     */
    set height(v){
        const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.constructor).prototype,'height');
        desc.set.apply(this,[v]); 
        this.flush(); 
    }