JavaScript実装メソッドのリロード


JavaScript実装メソッドのリロード
JSオリジナルではメソッドのリロードはサポートされていませんが、同じ名前のメソッドが2つ定義されている場合は、常に最後の定義を実行します.しかし、オリジナルがサポートされていないのは実現できないわけではありません.結局、JSは柔軟な動的言語です.次のように考えられます.
  • 判断パラメータリスト長
  • 閉包特性
  • を利用する.
    1.パラメータリスト長の判断
    サンプルコード:
    function overload() {
        if (arguments.length === 1) {
            // TODO
        }else if(arguments.length === 2){
            // TODO
        }
    }

    2.閉包特性の利用
    JQueryの父John Resigの本『Secrets of the JavaScript Ninja』(中国語訳名:JavaScript忍者秘籍)では、閉パッケージ特性を利用する方法が提供されている.
    サンプルコード:
    /**
     *          
     * @param object             
     * @param name          
     * @param fn        ,              ,         length       length+1      
     */
    function overloadMethod(object, name, fn) {
        const old = object[name];
        object[name] = function () {
            if (fn.length === arguments.length) {
                return fn.apply(this, arguments);
            } else if (typeof old === 'function') {
                return old.apply(this, arguments);
            }
        };
    }

    転載を歓迎して、転載して出典を明記してください:https://blog.kaguramea.me/archives/js-method-overload