利用参数的个数来实现重载,马上想到的方法是
函数重载(){ switch(arguments . length){ case 0: console . log('没有朋友');打破;Case 1: console.log('有朋友');打破;Case 2: console.log('有两个朋友');打破;Case 3: console.log('有三个朋友');打破;Case 4: console.log('有四个朋友');打破;//等等。}}这样可以实现重载,但是这样的代码比较长,实际开发中有时会出现很多情况。所以我们可以用下面的方法。
window . onload=function(){ var cat={ friends 3360[' Mimi ',' PP ',' gg']} add方法(cat,' say name ',function (a,b) {console.log('有两个朋友');}) add method (cat,' say name ',function () {console.log('没有朋友');}) add method (cat,‘说出名字’,function(a){ console . log(‘有朋友’);}) add method (cat,' say name ',function (a,b,c) {console.log('有三个朋友');}) cat.sayName('小明','倪好');cat . SayName();cat.sayName('小明');cat.sayName('小明','小红');}//实现重载,利用arguments.length的差异实现函数add方法(object,name,fn){ var old=object[name];object[name]=function(){ if(fn . length==arguments . length)返回fn.apply(this,arguments);else if(typeof old=='function ')返回old.apply(this,arguments);}}这种技术使用闭包,其中不同的参数被存储为引用。
实际调用addMethod函数,如下图所示
为什么会这样?
因为闭包,在addMethod的函数中调用了object[name]字面函数之外的变量old,使得垃圾回收机制不会回收old,所以old会一直存在内存中,不会消失,这就是这个特性实现的继承。
下面执行sayName的时候,我们会沿着上面存储的引用依次找到对应的参数,然后找到对应的函数来执行。
这种方法仍然有一些缺点:
1.重载只适用于不同数量的参数,但不区分类型、参数或其他东西。
2.这个方法会有函数调用的开销,因为闭包会占用一些内存。它不适合高性能应用。
摘要
上面提到的是边肖引入的JavaScript利用参数的个数来实现重载功能。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!