什么是伪数组?( 字面的意思已经呼之欲出了 )
- 有length属性
- 能按索引存储数据
- 能像遍历数组一样来遍历
- 不能使用数组的
push()、slice()
等方法
简单来说就是可以像数组一样操作的对象,但是没有数组的方法。
js中存在大量伪数组,如 :
1. function的arguments对象。
2. getElementsByName(),getElementsByTagName(),childNodes/children 等方法的返回值。
3. 还有比较常见的jquery,使用它获取的元素也是伪数组。
[].slice.call(arr);可以将伪数组转化为真正的数组对象
简单理解call、apply、bind的用法!
1 call就是为了,动态改变函数体内部this的指向
function add(a,b){ return a+b; } add.call(undefined,1,2); //3
这里我们通过call将1和2给分别传给了a和b,注意!undefined是一个占位的,不管你写什么反正就是要把位子给占着,因为第一个是this,参数是从后面开始的。
2 apply() 应用于某一个对象的一个方法,用另一个对象替换当前对象。
function add(a,b){ return a+b; } add.apply(undefined,[1,2]); //3
通过上面代码可以看出appiy和call基本类似,两者只是在调用的时候,传参的方式不同。区别在于apply只能接受数组参数,而call接受的是连续参数。
3 Bind bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。
bind方法与call,apply的用法有一些差异,但是其作用也是一样的,也是可以改变函数体内this的指向。还有就是bing不会立即调用,它会生成一个新的函数,你想什么时候调用就什么时候调用。
function add(a,b){
return a+b;
}
let x = add.bind(undefined,1,2)
x(); //3