利用参数的个数实现重载,马上想到的方法就是
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中使用参数个数实现重载功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# js实现重载
# javascript中通过arguments参数伪装方法重载
# js中方法重载如何实现?以及函数的参数问题
# js模拟如何实现重载以及默认参数
# 小编
# 有一个
# 的是
# 有两个
# 会有
# 在此
# 可以用
# 适用于
# 给大家
# 或其他
# 不适合
# 高性能
# 但不
# 来实现
# 较长
# 所述
# 给我留言
# 包里
# 感谢大家
# 如下图
相关文章:
建站主机选购指南:核心配置与性价比推荐解析
如何快速生成橙子建站落地页链接?
建站之星会员如何解锁更多建站功能?
金*站制作公司有哪些,金华教育集团官网?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
常州自助建站工具推荐:低成本搭建与模板选择技巧
小型网站建站如何选择虚拟主机?
,网页ppt怎么弄成自己的ppt?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
javascript中对象的定义、使用以及对象和原型链操作小结
如何在服务器上三步完成建站并提升流量?
如何选择CMS系统实现快速建站与SEO优化?
,如何利用word制作宣传手册?
如何在阿里云服务器自主搭建网站?
平台云上自助建站如何快速打造专业网站?
如何正确选择百度移动适配建站域名?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
创业网站制作流程,创业网站可靠吗?
网站app免费制作软件,能免费看各大网站视频的手机app?
网站设计制作企业有哪些,抖音官网主页怎么设置?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
如何高效配置IIS服务器搭建网站?
建站之星如何实现五合一智能建站与营销推广?
如何在局域网内绑定自建网站域名?
如何在Windows服务器上快速搭建网站?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何选购建站域名与空间?自助平台全解析
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
建站之星如何开启自定义404页面避免用户流失?
如何在服务器上配置二级域名建站?
网站制作话术技巧,网站推广做的好怎么话术?
宝塔建站无法访问?如何排查配置与端口问题?
如何快速登录WAP自助建站平台?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
常州企业建站如何选择最佳模板?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
如何用搬瓦工VPS快速搭建个人网站?
建站之星ASP如何实现CMS高效搭建与安全管理?
如何通过虚拟主机快速搭建个人网站?
广州商城建站系统开发成本与周期如何控制?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
浅析上传头像示例及其注意事项
详解jQuery停止动画——stop()方法的使用
Python如何创建带属性的XML节点
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
孙琪峥织梦建站教程如何优化数据库安全?
*请认真填写需求信息,我们会在24小时内与您取得联系。