JS中this的几种情况
1.给元素的某个事件行为绑定方法,事件触发,方法执行,此时方法中的this一般都是当前元素本身:
<div id="div"></div>div.onclick = function() {
console.log(this); //=><div id="div"></div>
};div.addEventListener('click', function () {
console.log(this); //=><div id="div"></div>
}, false);这里边有个特殊情况就是dom2级绑定事件
div.attachEvent('onclick',function anonymous(){
console.log(this); //=>window
});
2.普通函数执行,它里边的this是谁,取决于方法执行前面是否有“.”,有的话,“.”前面是谁this就是谁,没有的话并且是在非严格模式下this就是window,严格模式下是undefined:
function fn() {
console.log(this);
}
let obj = {
name: 'OBJ',
fn: fn
};
fn(); //window
obj.fn(); //{name: 'OBJ',fn: fn}3.构造函数执行(也即是new执行),函数中的this是当前类的实例:
function F() {
console.log(this);
}
let f = new F; // F {}
4.箭头函数中没有this,所用到的this都是其上下文中的this(或者说是上级上下文):
let obj = {
fn: () => {
console.log(this);
}
}
obj.fn(); //windowlet obj = {
fn: function () {
setTimeout(_ => {
console.log(this);
}, 1000);
}
};
obj.fn(); //obj5.基于call/apply/bind可以改变函数中this的指向:
let obj = {
fn: function(){
console.log(this);
}
}
obj.fn(); //obj
obj.fn.call(12); //12本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!