上下文调用模式:JS提供给我们的三个方法,而这三个方法的作用是随意控制函数中this的指向
1.函数.call(第一个参数:想让函数中this指向谁,就传谁进来
后面的参数:本身函数需要传递的实参,一个个传递进来即可)
call()的作用:
(1)调用函数
(2)指向函数中this的指向
<script> function fn(x,y){ console.log(x+y) console.log(this) } fn.call([15,54,68],5,9) </script>
打印结果:
14
Array(3)
2.函数.apply(第一个参数:想让函数中this指向谁,就传谁进来,
第二个参数要求传一个数组,数组中包含了要传递的实参)
apply()的作用:
(1)调用函数
(2)指向函数中this的指向
<script> function fn(x,y){ console.log(x+y) console.log(this) } fn.apply([12,54,68],[11,9]) </script>
打印结果:
20
Array(3)
3.函数.bind(第一个参数:想让函数中this指向谁,就传谁进来
后面的参数:本身函数需要传递的实参,一个个传递进来即可)
bind()的作用:
(1)克隆当前函数,返回克隆出来的新的函数
(2)新克隆出来的函数,这个函数的this被指向了
<script> function fn(x,y){ console.log(x+y) console.log(this) } var f=fn.bind([12,54,68],1,9) f(); </script>
打印结果:10
[12,54,68]
4.上下文调用模式的三个方法的总结
(1)call,allay,这两个方法都会调用函数
(2)call,bind,这两个方法里面的传参方式是一样的
(3)bind ,方法不会调用函数,只会克隆一个新的函数出来
5.让伪数组使用数组的方法
var lis = document.getElementsByTagName('li'); //lis是一个伪数组 Array.prototype.forEach.call(lis,function(v){ //forEach是数组的方法,所以使用call调用数组的forEach方法
console.log(v.innerText) })