JS没有重载(读书笔记)

来源:互联网 发布:洛天依黑暗五部曲 知乎 编辑:程序博客网 时间:2024/06/18 05:23

ES为什么没有重载:


首先Function类型:通俗概念可以理解为“函数是对象,函数名是指针”。

函数是对象:

  • ES中的数据分为基本类型(5种)和引用类型,引用类型即是由值构成的对象,保存在堆内存中。
  • 既然函数是对象,那么作为对象的函数就和其它引用类型一样具有属性和方法。

函数名是指针:

  • 指针指向函数对象,不会与某个函数绑定,换句话说,函数可能有多个名字,这些不同的名字其实就是不同的指针,指向同一个函数对,这就是没有重载的原因。例如

function sum(num1,num2){return num1 + num2;}alert(sum(10,10));          //20var anotherSum = sum;       sum = null; alert(anotherSum(10,10));   //20 指针没有和函数对象绑定


怎么做到重载的效果:


利用arguments对象的length属性,对函数的参数个数进行if判断

函数参数:

  • ES中的参数在内部是用一个数组表示。
  • 不管数组里的参数有或者没有,是什么类型,函数始终都会接收这个数组,这是允许的。

arguments对象:

  • 函数是对象,有属性和方法,arguments对象是内置在函数体内一个属性。
  • 作用是可以访问参数数组,从而获取传递函数的每一个参数,如第一个元素是arguments[0],第二个元素是arguments[1],以此类推。
  • arguments对象获取的值永远与对应命名参数的值保持同步。
  • 通过访问arguments对象的length属性可以获知有多少参数传递给了函数。
  • 可以看出argumenrs对象只是与Array类型类似,但是它并不是Array的实例。

代码如下

function doAdd(){if(arguments.length == 1){alert(arguments[0] + 10);}else if(arguments.length == 2){alert(arguments[0] + arguments[1]);}}    doAdd(10);          //20doAdd(30,20);       //50


0 0