JavaScript中使用参数个数实现重载功能
2017-09-01 11:54
363 查看
利用参数的个数实现重载,马上想到的方法就是
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函数的情况,如下图
为什么会这样呢?
因为闭包的原因,在addMethod的函数中调用了object[name]字面量函数外部的变量old,这使得垃圾回收机制不会回收old,所以old会一直存在内存中,不会消失,我们就是利用的这个特性实现的继承。
下面执行sayName的时候,我们会沿着上边存储的引用依次查找相应的参数,然后找到对应函数来执行。
这种方法还是存在不足:
1.重载只适用于不同数量的参数,但不区分类型、参数或其他东西。
2.这个方法会有函数调用的开销,因为用到了闭包,会占用一些内存。在高性能应用的情况下不适合。
总结
以上所述是小编给大家介绍的JavaScript中使用参数个数实现重载功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:
相关文章推荐
- 使用javascript 实现.net 验证控件功能
- 使用Javascript实现一种简单的数字混淆功能(高手绕过)
- JavaScript使用execCommand实现浏览器的注销功能
- 使用javascript实现简单倒数计时功能
- 使用 JavaScript 实现灵活的固定导航功能
- 使用JavaScript代码实现各种数据控件的反选功能,不要只做拖控件的菜鸟
- JavaScript中使用zDragDrop实现拖放功能
- JavaScript命名空间、函数参数类型重载的实现
- 使用javascript实现的一些功能
- SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表
- 使用 JavaScript 实现灵活的固定导航功能
- 使用javascript,jquery实现的图片轮播功能
- 使用javascript实现的一些功能
- 用Javascript实现查看CSS属性使用频率的功能
- 使用JavaScript实现选择头像和表情的功能
- PHP中使用Session配合Javascript实现文件上传进度条功能
- 使用javascript操作多选列表框,实现动态增加删除,左右移动,上下排序移动等功能。
- 使用ADF-BC 实现查询功能之四:通过代码动态设置Where条件参数
- 使用javascript实现多个图片漂浮的效果(完善火狐滤镜功能)
- 如何在不用JavaScript的情况下使用CSS来实现图表功能