this(普通函数)————初版
this(普通函数)
this是什么
this———用于访问当前方法所属的对象
let obj = { |
当前这个方法fn是属于obj,所以this就是obj,所以结果为true
这时用另一种写法
let obj = { |
这种后添的写法结果也是完全一样
this绑定方式
this和函数的定义无关,和函数的调用有关,也可以说同一个函数的this可以有很多种值,这取决于怎么调用这个函数
1.直接调用——window || undefined PS:在node环境里为global或者undefined
下面是直接调用函数
function show(){ |
结果为window,但这是个错误,因为show不属于任何对象,和this的定义有所冲突
在这里window相当于是一个兜底的角色,就是找不到this的时候,就用window来兜底
后面经过修改,如果加上了严格模式
则结果为undefined
2.挂载在对象上,然后执行方法,那this就指向对象
let arr=[1,2,3] |
此时输出的结果就是arr,因为此时show挂在了arr上面,属于对象arr,所以this输出的值就是arr
3.定时器——window
setTimeout(show,100) |
在加了严格模式下输出结果仍为window
因为定时器本来就属于window,window来执行定时器,定时器来执行show,所以最终show是被window调用的
4.工具函数
使用call强制改变this的值 ps:apply
show.call(12) |
使用forEach
let arr=[1,2,3] |
这里的情况相当于第一种情况
函数并没有挂在arr上面,只是交给了forEach去调用
forEach实际上是
arr.forEach=function (cb){ |
但是forEach有第二个参数,这个参数就有绑定this的作用
let arr=[1,2,3] |
这里的用法就相当于是call的用法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 YUN's Blog!