Javascript能够实现类似重载的效果嘛?

!!!首先javascript没有传统意义上的函数重载

另外我们要先清楚什么是函数重载

函数重载就是函数名相同,函数的参数列表不同(包括参数个数和参数类型),根据参数的不同去执行不同的操作。

我们来看一个具体的例子:
截屏2021-05-01 下午3.52.14.png

第一种实现重载的方法通过判断arguments长度来实现

截屏2021-05-01 下午3.56.49.png

先来看一个需求,我们有一个 people 对象,people 对象的values 属性中存着一些名字。

let people = {
  values: ["Michael Jackson", "Michael Jordan", "Kobe Bryant", "Klay Thompson"],
};
复制代码

这个需求中 selfName方法 需要根据参数的个数不同而执行不同的操作,下来我们通过一个 addMethod 函数,来在 people 对象中添加这个 selfName 方法。

截屏2021-05-01 下午6.09.49.png

下面是完整的代码

截屏2021-05-01 下午6.11.47.png

截屏2021-05-01 下午6.12.06.png

截屏2021-05-01 下午6.12.18.png

addMethod 函数是利用了闭包的特性,通过变量 old 将每个函数连接了起来,让所有的函数都留在内存中。

每调用一次 addMethod 函数,就会产生一个 old,形成一个闭包。

我们通过console.dir(people.selfName);在控制台来看一下

截屏2021-05-01 下午6.19.37.png

当我们在末尾执行的时候,首先会去调用最后保存的people里面的selfName,结果这时候selfName里面的fn需要两个参数不匹配,就会去调用old,这样层层查找最终就会找到不带参数的函数,结果就执行来第一次执行addMethod里面的函数内容,最终输出了一个完整的数组,其他的打印类似这样的流程。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享