温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JavaScript使用参数个数实现重载功能的方法

发布时间:2022-04-28 14:39:17 来源:亿速云 阅读:168 作者:iii 栏目:大数据

今天小编给大家分享一下JavaScript使用参数个数实现重载功能的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

实例如下:

function overload(){      switch(arguments.length){        case 0:          console.log("一个朋友都没有");          break;        case 1:          console.log("有一个朋友");          break;        case 2:          console.log("有两个朋友");          break;        case 3:          console.log("有三个朋友");          break;        case 4:          console.log("有四个朋友");          break;        //等等      }    }

这种方式能实现重载,但是这样的代码比较长,实际开发中情况有时候会很多。所以我们可以用下面的方法。

window.onload=function (){      var cat={        friends:["mimi","pp","gg"]      }      addMethod(cat,"sayName",function(a,b){        console.log("有两个朋友");      })      addMethod(cat,"sayName",function(){        console.log("一个朋友都没有");      })      addMethod(cat,"sayName",function(a){        console.log("有一个朋友");      })      addMethod(cat,"sayName",function(a,b,c){        console.log("有三个朋友");      })      cat.sayName("xiaoming","nihao");      cat.sayName();      cat.sayName("xiaoming");      cat.sayName("xiaoming","xiaohong");    }    //实现重载,利用arguments.length的不同来实现    function addMethod(object,name,fn){      var 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);      }    }

这个技巧利用的是闭包,在闭包里作为引用进行存储的不同参数的情况。

为什么会这样呢?

因为闭包的原因,在addMethod的函数中调用了object[name]字面量函数外部的变量old,这使得垃圾回收机制不会回收old,所以old会一直存在内存中,不会消失,我们就是利用的这个特性实现的继承。

下面执行sayName的时候,我们会沿着上边存储的引用依次查找相应的参数,然后找到对应函数来执行。

这种方法还是存在不足:

1.重载只适用于不同数量的参数,但不区分类型、参数或其他东西。

2.这个方法会有函数调用的开销,因为用到了闭包,会占用一些内存。在高性能应用的情况下不适合。

以上就是“JavaScript使用参数个数实现重载功能的方法”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI