JS函数重载解决方案

  JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,所有的实参都是保存在了这个数据结构里面,我们定义函数的时候所指定的形式参数其实是为这个数据结构里面的数据定义一个快捷的访问方式。也就是说js所有的函数都是支持无限个参数的,加上数据类型是弱类型,那么JS的函数除了名称就真的没有方法区别了?

  办法总是有的,我们可以利用JavaScript中的特殊对象arguments来模拟函数重载。用它来判断传入参数的个数或类型以区分重载。

1.根据参数个数重载

js判断传入参数数量可以用arguments.length这个属性来判断;

<script type="text/javascript">
function add() {
    if (arguments.length == 1) {
        alert(arguments[0] + 10);
    }
    else if (arguments.length == 2) {
        alert(arguments[0] + arguments[1]);
    }
}
//函数调用
add(10);
add(10, 20);
</script>

2.根据参数类型重载

判断变量类型的3种方法:
1.用 typeof 语句判断变量类型,typeof语句返回类型对应的字符串。
2.用 instanceof 语句判断变量类型,instanceof语句返回true/false。
3.用 constructor 属性判断变量类型,这个属性返回用来构造该变量的构造函数引用。
对照表:可以看出用 typeof 不能准确的判断出具体的类型,所以我们用 constructor 来进行判断。

typeofstringnumberobjectfunctionbooleanobjectobject
constructorStringNumberObjectFunctionBooleanArrayUser Define

<script type="text/javascript">
function add() 
{
    if (arguments.length == 0) return 0;
    var sum=0;
    for(var i=0; i<arguments.length; i++){
        if(arguments[i].constructor == Number){
        //或者改为:if(arguments[i] instanceof Number)
        //或者改为:if(typeof(arguments[i])=="number")
        sum += arguments[i];
      }
    }
    return sum;
}
//函数调用
alert(add(10));
alert(add(10,20));
</script>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一种现代化的JavaScript框架,可以非常方便地实现单页面应用程序(Single Page Application,SPA)的开发。Vue的路由机制通过vue-router进行实现,它使用URL路径来映射不同的组件,可以实现无刷新切换组件视图。 然而,在使用Vue的路由机制的过程中,有时候会出现路由发送改变但是页面没有重新加载的情况。这种情况通常是由于Vue的路由机制使用了浏览器的History API,通过改变浏览器的URL来实现路由的变化,而不是通过重新加载页面。 解决这种问题的方法有很多,其中比较常用的方法是使用Vue的$watch属性。$watch可以用来监视Vue实例中的数据变化,可以在数据变化的时候做出相应的操作。通过在Vue实例中添加$watch属性,可以监视路由变化,一旦路由发生变化就重新加载页面。具体实现方法可以参考Vue官方文档中的介绍。 另外,在使用Vue的路由机制时,还可以使用Vue的keep-alive组件来缓存组件。keep-alive可以将动态组件缓存起来,当组件再次被使用时,不会重新渲染DOM和执行mounted钩子函数,可以提高应用程序的性能。但是在使用keep-alive组件时,需要注意组件内部的生命周期钩子函数,如果这些函数的执行结果影响了组件的显示内容,需要在beforeRouteLeave钩子函数中重新定义这些函数,以保证组件显示正常。 总之,解决Vue路由发送变化但是页面没有重载的问题,需要结合具体情况采取不同的解决方案。在开发过程中,需要注重对Vue官方文档的学习和理解,以便更好地运用Vue的各种功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值