正文
二、事件绑定中的this
给dom元素的某个事件行为绑定方法,当时间触发方法执行,方法中的this就是当前dom元素本身。
document.body.onclick = function () { console.log(this) } document.body.addEventListener('click', function () { console.log(this) })
注:IE6-IE8中基于attachEvent实现事件绑定,事件触发方法执行时,方法中的this不在元素本身,一般情况下都是指向window。
/\* document.body.attachEvent('onclick', function () { console.log(window) console.log(this) }) \*/
三、普通函数执行中的this
1、函数执行,看函数前是否有“点”,有“点”,“点”前面是谁,this就指向谁,如果没有“点”,this就指向window(js严格模式下是undefined)
function fn(){ console.log(this); } fn(); //window let obj={ fn:function(){ console.log(this); }, fn1:{ fn2:function(){ console.log(this); } } } obj.fn(); //obj obj.fn1.fn2(); //obj.fn2
闭包中的this 一般都指向window
let obj={ fn:function(){ return function(){ console.log(this); } } } obj.fn();
2、自执行函数执行,其内的 this 一般都是window,严格模式下为undefined
3、回调函数中的this为window或者undefined,除非做过特殊处理(如:数组的forEach方法·)
[1,2,3].forEach(function(){ console.log(this); //window }); //forEach对内部this进行处理 [1,2,3].forEach(function(){ console.log(this); //{a:10} },{a:10})
四、箭头函数中的this
箭头函数中没有自己的this,所用到的this都是上下文中的this
箭头函数可以保留this的指向,因为它本身没有。
let obj = { n: 1000, fn() { setTimeout(function () { // this ==> window console.log(this) }, 500) setTimeout(() => { // this 所处上下文中的this => obj console.log(this) }, 1000); } } obj.fn() #### react和vue的比较 相同 1)vitual dom 2)组件化 3)props,单一数据流 不同点 1)react是jsx和模板;(jsx可以进行更多的js逻辑和操作) 2)状态管理(react) 3)对象属性(vue) 4)vue:view——medol之间双向绑定 5)vue:组件之间的通信(props,callback,emit) ![](https://ucc.alicdn.com/images/user-upload-01/img_convert/dab505d822f370449dde55eb65e06304.webp?x-oss-process=image/format,png) ![](https://ucc.alicdn.com/images/user-upload-01/img_convert/465bae7a52707e3cc1aa31d9c90a37a1.webp?x-oss-process=image/format,png) **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)** ![img](https://ucc.alicdn.com/images/user-upload-01/img_convert/18fe2d6d6bd24a483a60173a8b77db1c.png) **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!** 加V获取:vip1024c (备注前端)** [外链图片转存中...(img-JAFvnPdb-1713432092767)] **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**