简单易行定义:依照分化参数长度来得以落成让同1个函数,进行不一致管理。

function addMethod (obj, name, fun) {
    let old = obj[name]
    obj[name] = function () {
        if (fun.length === arguments.length) {
            return fun.apply(this, arguments)
        } else if (typeof old === 'function') {
            return old.apply(this, arguments)
        }
    }
}

使用:

var a = {}
addMethod(a, 'test', function(x){console.log(x)})
addMethod(a, 'test', function(x, y){console.log(x+y)})
addMethod(a, 'test', function(x, y, z){console.log(x+y+z)})
// test 是function名字,当参数长度不一样时候,执行的test不一样

测试:

a.test('s')
> s
a.test(1)
> 1
a.test(1,2)
> 3
a.test('1','2')
> 12
a.test('1','2','3')
> 123
a.test(1,2,3)
> 6

 

任何面向对象的语言(例如Java)的1种共有的特点是“重载”函数的力量:传给它们分化数量或项目标参数,函数将实践不一操作。固然那种力量在JavaScript
中不是直接可用的,一些工具的提供使得那种追逐完全成为可能。
  在JavaScript的每多个函数里存在三个上下文相关的名字为arguments的变量,它的表现看似于1个伪数组,包罗了传给函数的享有参数。参数不是一着实的数组(意味着你不能够修改它,或许调用push()方法扩大新的项),不过你可以以数组的花样拜访它,而且它也真正有1个length属性。

学过JAVA的人对函数的掩盖和重载肯定是再谙习然则了。
重载指三个或四个函数的参数类型,顺序和数码以及重临值不平等。
蒙面指多个或八个函数的参数类型,顺序和数目以及重回值完全一样。
函数重载,js函数重载。这javascript真的有那种特点么?
回答是JS中函数重名只会利用末段3个定义。
率先来看下下边包车型客车代码

学过JAVA的人对函数的覆盖和重载鲜明是再熟谙然而了。
重载指三个或多个函数的参数类型,顺序和数目以及重回值不雷同。
蒙面指五个或四个函数的参数类型,顺序和数据以及重回值如出一辙。
那javascript真的有那种特点么?
回答是JS中等学校函授数重名只会使用末段一个定义。
首先来看下下边包车型地铁代码

 

复制代码 代码如下:

复制代码 代码如下:

图片 1图片 2示例

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME=”Generator” CONTENT=”EditPlus”>
<META NAME=”Author” CONTENT=””>
<META NAME=”Keywords” CONTENT=””>
<META NAME=”Description” CONTENT=””>
</HEAD>
<SCRIPT LANGUAGE=”JavaScript”>
<!–

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME=”Generator” CONTENT=”EditPlus”>
<META NAME=”Author” CONTENT=””>
<META NAME=”Keywords” CONTENT=””>
<META NAME=”Description” CONTENT=””>
</HEAD>
<SCRIPT LANGUAGE=”JavaScript”>
<!–

网站地图xml地图