【JavaScript】JavaScript 函数同名覆盖问题和解决方法

一、问题描述:

   class  myClass{

        A(){};

        A(arg){}

    }

    编译为ES5标准的时候,变成  myClass.prototype.A= function (){}    myClass.prototype.A= function (arg){}  

  结果就是,所有调用A的地方,无法参数个数是否相同,都是执行A(arg)那个,因为后面的那个同名函数覆盖了前一个同名函数。

  其实,不只是ES6的class中,ES5中的语法也有这种问题。

  也就是: js中只要函数名形同,后加载的函数会覆盖先加载的函数,无参数有无或参数多少无关。

     

二、  解决方法:

   思路:   作用域  (方法三,四)和  避免同名  (方法二,一)两方面来解决问题。

   方法一:一个函数,内部判断参数个数

js没有重载,因此需要做判断。

function hello(userName,age){
        if(arguments.length==2){
                    alert("我是带2个参数的hello(userName, age)函数!" + " - " + userName + " - " + age);
        }else if(arguments.length==1){
             alert("我是带1个参数的hello(userName)函数!" + " - " + userName);
        }else if(arguments.length==0){
                alert("我是无参数的hello()函数!");
        }
}

其实js的函数就是一个变量(除了存在变量提升),因此如果你在你的代码最后加上hello="改成字符串";,再执行hello()就会报错,因为hello现在是个字符串而不是函数。

  方法二: 协同命名

   多人开发项目中,大家提前协商好命名规范,或者按照功能来命名。

  方法三:对象命名空间

   命名空间,就是我们创建一个对象,把该对象作为一个命名空间,我们可以通过对象-属性或者对象-方法来创建或者获取一个变量或者函数。每个对象都是相互独立的,这样只要每个人定义不同的命名空间,就避免命名冲突。

  方法四:匿名函数

当我们在函数里面定义变量的时候,该变量的作用域就是在该函数的内部,这时我们无法在函数外部访问到该变量,我们每个人在不同的函数内部定义变量,即使变量名字相同,也不会相互干预。

 

参考博客:【JavaScript避免重命名的方法】

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值