数组 call()、apply()、bind()的使用 this arguments

数组(Array)

数组也是一个对象,它和普通的对象一样,也是用来存储一些值的,不同的是普通对象是使用字符串作为属性名的,而数组使用数字作为索引来操作元素
数组的存储性能比普通对象好,再开发中我们经常使用数组来存储一些数据
索引就是从0开始的整数

数组的操作:

创建数组

1
2
var arr = new Array();  
var arr = [];

向数组中添加元素,数组中的元素可以是任何数据类型(包括对象,函数,数组)
语法:数组对象[索引] = 值;

1
2
arr[0] = 123;  
arr[1] = "hello";

创建数组时直接添加元素
语法:

1
var arr = [元素1,元素2....元素N];

例子:

1
var arr = [123,"hello",true,null];

读取数组中的元素

语法:数组[索引],如果读取不存在的索引,他不会报错而是返回undefined

使用length属性来获取和设置数组的长度

获取长度:

数组对象.length
length获取到的是数组的最大索引+1
对于连续的数组,length获取到的就是数组中元素的个数

修改数组的长度

数组.length = 新长度
如果修改后的length大于原长度,则多出的部分会空出来
如果修改后的length小于原长度,则原数组中多出的元素会被删除

向数组的最后添加元素

数组[数组.length] = 值;

数组的方法

自己去文档的数组对象中查看

遍历数组

遍历数组就是将数组中元素都获取到
一般情况我们都是使用for循环来遍历数组

1
2
3
for(var i=0 ; i<数组.length ; i++){  
//数组[i]
}

使用forEach()方法来遍历数组(更为方便)

forEach方法需要一个函数作为参数,像这种由我们创建不由我们调用的函数,称为回调函数。

数组中有几个元素,该回调函数就会被调用几次,
每次调用时,都会将遍历到的信息以实参的形式传递进来,
我们可以定义形参来获取这些信息。
value:正在遍历的元素
index:正在遍历元素的索引
obj:被遍历对象

详见文档

 call()、apply()、bind()的使用

这两个方法都是函数对象的方法,需要通过函数对象来调用。
当对函数调用call()和apply()都会调用函数执行。
在调用call()和apply()时可以将一个对象指定为第一个参数,此时这个对象将会成为函数执行时的this。
call()方法可以将实参在对象之后依次传递fun.call(obj, 参数1, 参数2)。
apply()方法需要将实参封装到一个数组中统一传递 fun.apply(obj,[参数1,参数2 ])。
bind 除了返回是函数以外,它 的参数和 call 一样,fun.bind(obj, 参数1, 参数2)()。

- 可以使函数临时成为任意对象的方法使用。

this的不同的情况:(由this的调用方式决定)

1.它所在函数以函数的形式调用时,this是window
2.它所在函数以方法的形式调用时,this就是调用方法的对象
3.它所在函数以构造函数的形式调用时,this就是新创建的对象
4.它所在函数以使用call和apply方法的形式调用时,this就是指定的那个对象
5.在事件的响应函数中,响应函数是给谁绑定的,this就是谁(说明该函数是通过方法调用的符合情况2

arguments

在调用函数时,浏览器每次都会传递两个隐含的参数:
1.函数的上下文对象 this
2.函数封装的对象 arguments
arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度
在调用函数时,我们所传递的实参都会在arguments中保存
arguments.length可以用来获取实参的长度
我们即使不定义形参,也可以通过arguments来使用实参,只不过比较麻烦
arguments[0] 表示第一个实参
arguments[1] 表示第二个实参
它里面有一个属性叫做callee,这个属性对应一个函数对象,就是当前正在指向的函数对象

学识浅薄,如有错误,恳请斧正,在下不胜感激。

原文地址:https://www.cnblogs.com/yin-jie/p/14620168.html