!!!首先javascript没有传统意义上的函数重载
另外我们要先清楚什么是函数重载
函数重载就是函数名相同,函数的参数列表不同(包括参数个数和参数类型),根据参数的不同去执行不同的操作。
我们来看一个具体的例子:
第一种实现重载的方法通过判断arguments长度来实现
先来看一个需求,我们有一个 people 对象,people 对象的values 属性中存着一些名字。
let people = {
values: ["Michael Jackson", "Michael Jordan", "Kobe Bryant", "Klay Thompson"],
};
复制代码
这个需求中 selfName方法 需要根据参数的个数不同而执行不同的操作,下来我们通过一个 addMethod 函数,来在 people 对象中添加这个 selfName 方法。
下面是完整的代码
addMethod 函数是利用了闭包的特性,通过变量 old 将每个函数连接了起来,让所有的函数都留在内存中。
每调用一次 addMethod 函数,就会产生一个 old,形成一个闭包。
我们通过console.dir(people.selfName);在控制台来看一下
当我们在末尾执行的时候,首先会去调用最后保存的people里面的selfName,结果这时候selfName里面的fn需要两个参数不匹配,就会去调用old,这样层层查找最终就会找到不带参数的函数,结果就执行来第一次执行addMethod里面的函数内容,最终输出了一个完整的数组,其他的打印类似这样的流程。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END