프로그래밍/Js

ES6 클래스의 메소드를 함수호출하는 방법

소행성왕자 2023. 3. 31. 10:06

클래스의 메소드를 함수를 이용하여 호출하는 방법을 알아보도록 합니다.

템플릿 메소드를 이용한것입니다.

대략 23분 참고

https://www.youtube.com/watch?v=ik7HZrEqfEA&list=PLBA53uNlbf-vuKTARH6Ka7a_Jp0OVT_AY&index=2 

const SET = {
            stage: {
                max:10,
            }

        };

        const Subdata = class {
            constructor(listener) {} 
            notify() {}
            clear() {
                this._clear();
            }
        };
        const Stage = class extends Subdata {
            _clear() {
                console.log('_clear()');
                console.log(SET.stage.max)
            }
        };

을 아래와 같이 변경합니다.

const SET = {
            stage: {
                max:10,
            }

        };
        const ERR = v => { throw v; };
        const TMPL = (self, method, ...arg) => {
            '_' + method in self ? self['_' + method](...arg) : ERR();
        }
        const HOOK = (p, method) => { 
            return typeof p.prototype[method] === 'function' ? '_'+method : ERR(); 
        };

        const Subdata = class {
            constructor(listener) {} 
            notify() {}
            clear(...arg) {
                TMPL(this, 'clear', ...arg);
            }
        };
        const Stage = class extends Subdata {
            constructor() {
                super();
            }
            [HOOK(Subdata, 'clear')](...arg) {
                console.log('_clear()');
                console.log(SET.stage.max);
                console.log(...arg);
            }
        };

        
        const APP = (SET => {

        })(SET);

        //APP.init();
        
        const s = new Stage();
        s.clear({a:1,b:2,c:3});