JS没有重载(读书笔记)

ES为什么没有重载:


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

函数是对象:

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

函数名是指针:

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

function sum(num1,num2){
	return num1 + num2;
}
alert(sum(10,10));          //20

var 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);          //20
doAdd(30,20);       //50


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值