this的指向
=====================》》》普通函数
1this默认指向全局对象,2但在严格模式下为undefined。3但在window.test()这种情况下,test函数中的this指向谁调用的,即window。
=====================》》》箭头函数
1箭头函数在严格或者非严格模式下this均指向window。2箭头函数是忽略改变this指向的(call\apply\bind)!!
3且箭头函数的this不是谁绑定指向谁的!!4箭头函数this指向==》外层作用域的this指向(外层函数不能是箭头函数)
5对象方法内部的this ==》指向最近的引用(谁调用的!)。6而如果在对象的方法中再嵌套一个非箭头函数,那么这个函数里头this指向window,这是为啥呢==》这个嵌套不会影响到他的this指向,他是被孤立的函数!!!!
=====================》》》事件处理函数
1事件处理函数内部的this指向总是指向被绑定的元素的dom元素。2所以一般在使用this的属性中我们会在对应的方法加入bind来改变this指向实例。
=====================》》》类
类的本质是函数。1在new一个类的时候this指向实例的对象,constructor中的方法是实例化先执行的,而constructor()外定义的方法可以视为原型链继承而来的。且constructor可以固定在调用方法中this的指向。
2在类的继承中,子通过在constructor函数中使用super()来对父实例化使得在子中生成对父this的绑定可以使用父的constructor的this对象。
=====================》》》call、apply、bind
1call和apply以及bind,bind最主要区别在于会返回一个新函数,需要进行调用。2即使多次调用也只生效一次重点只生效一次!!!
=====================》》》不知咋命名
定义对象来设置属性1字面量定义、2Object.create()、3Object.defineProperty(obj3,'a',{get:function(){....}})其中this指向obj3。4构造函数中this属性,如果return 一个对象会使得原先的this对象被忽略掉。
总结:个人来说this在不同情况下指向也有所不同,如在普通函数默认指向window但严格模式undefined;但箭头函数在严格或者不严格的模式下均指向window,且不接受call/apply/bind的改变this指向,一般在对象中指向的是外部作用域且需外部函数不是箭头函数,然后一般我们遵循谁调用指向谁,但是呢这个在箭头函数不通用哦;还有的是事件处理函数this指向的是被绑定的dom元素。