js重载

Posted by Eric on November 6, 2018
 function addMethod (obj, name, fn) {
        var old = obj[name];
        obj[name] = function () {
            // fn.length指函数fn在定义时,形参的个数。
            if (fn.length === arguments.length) {
                return fn.apply(this, arguments)
            } else if (typeof old === 'function') {
                return old.apply(this, arguments)
            }
        }
    }

    var person = {userName: 'bear鲍的小小熊'}

    addMethod(person, 'show', function () {
        console.log(this.userName + '---->' + 'show1')
    })
    addMethod(person, 'show', function (str) {
        console.log(this.userName + '---->' + str)
    })
    addMethod(person, 'show', function (a, b) {
        console.log(this.userName + '---->' + (a + b))
    })
    person.show()  
    person.show('bkl')
    person.show(10, 20)

输出的结果:

    //bear鲍的小小熊---->show1
    //bear鲍的小小熊---->bkl
    //bear鲍的小小熊---->30