为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript 中实现方法重载的问题

Javascript 中实现方法重载的问题

Neokekeke 2018-02-25 16:52:40
    var obj = {      name : ["Dean Edwards", "Sam Stephenson", "Alex Russell", "Dean Tom"]    };    function addMethod(obj , name , fn){        var old2 = obj[name];        obj[name] = function(){            if(fn.length == arguments.length){                return fn.apply(this , arguments);            }            else if(typeof old2 === 'function'){                console.log(old2 == obj[name]);  //这里为什么是不相等的呢?                return old2.apply(this , arguments);            }        };    }    addMethod(obj , "find" , function(){        return this.name;    });    addMethod(obj , "find" , function(firstname){        var ret = [];        for(var i = 0 ; i < this.name.length; i++){            if(this.name[i].indexOf(firstname) === 0){                ret.push(this.name[i]);            }        }        return ret;    });    addMethod(obj , "find" , function(firstname , lastname){        var ret = [];        for(var i = 0 ; i < this.name.length; i++){           if(this.name[i] === firstname + " " + lastname){               return ret.push(this.name[i]);           }        }        return ret;    });    console.log(obj.find());    console.log(obj.find('Dean'));    console.log(obj.find('Dean','Edwards'));old2.apply(this , arguments);请问这段代码是怎么理解的呢,以及方法绑定的链条是怎么样的呢?请各位大神解答一下,谢谢啦!为什么可以向上调用old指向的上个方法。
查看完整描述

1 回答

已采纳
?
橋本奈奈未

TA贡献436条经验 获得超108个赞

闭包。挺复杂的,看起来真费劲。

old2是上次添加进来的function,apply方法是使用指定的上下文对象调用该函数。逻辑大概是这样的:

     find()调用;

     执行最后一次添加的匿名函数即两个参数的那个;

     fn.length指的是该函数有多少个必须要传入的参数,即形参的个数。arguments是实际传入的参数。2!=0;

    执行old2并指定其上下文为obj,old2因为闭包指向的是上一次添加的函数引用。即执行第二次添加的函数。重复上个步骤。

查看完整回答
反对 回复 2018-03-02
  • 1 回答
  • 0 关注
  • 886 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信