• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

Javascript 中实现方法重载的问题

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.indexOf(firstname) === 0){
                ret.push(this.name);
            }
        }
        return ret;
    });
    addMethod(obj , "find" , function(firstname , lastname){
        var ret = [];
        for(var i = 0 ; i < this.name.length; i++){
           if(this.name === firstname + " " + lastname){
               return ret.push(this.name);
           }
        }
        return ret;
    });


    console.log(obj.find());
    console.log(obj.find('Dean'));
    console.log(obj.find('Dean','Edwards'));


old2.apply(this , arguments);请问这段代码是怎么理解的呢,以及方法绑定的链条是怎么样的呢?请各位大神解答一下,谢谢啦!为什么可以向上调用old指向的上个方法。

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

闭包。挺复杂的,看起来真费劲。
old2是上次添加进来的function,apply方法是使用指定的上下文对象调用该函数。逻辑大概是这样的:
  find()调用;
  执行最后一次添加的匿名函数即两个参数的那个;
  fn.length指的是该函数有多少个必须要传入的参数,即形参的个数。arguments是实际传入的参数。2!=0;
  执行old2并指定其上下文为obj,old2因为闭包指向的是上一次添加的函数引用。即执行第二次添加的函数。重复上个步骤。

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!