JavaScript中this指向
在js中this指向不是固定不变的,它会随着执行环境的改变而改变。
- this默认指向全局对象。
- 在方法中,this表示该方法所属的对象。
- 定时器的this永远指向window,除非使用bind、call和apply等函数人为的改变指向
- 在事件中,this 表示接收事件的元素。
- 在函数中,this 表示全局对象。
全局函数
console.log(this); //window
function fn() {
console.log(this); //winsow
}
fn();
构造函数
指向实例对象
function Person(name, age) {
console.log(this);//指向zs/ls
this.name = name;
this.age = age;
}
var zs = new Person('zhangsan', 18);
var ls = new Person('lisi', 20);
对象的方法
指向对象
var obj = {
fn: function () {
console.log(this);
console.log(this === obj) //true
}
}
obj.fn();
事件处理函数
指向事件源对象
var btn = document.querySelector('#btn');
btn.onclick = function () {
console.log(this); //指向btn
}
var btn = document.querySelector('#btn');
btn.addEventListener('click', function () {
console.log(this); //指向btn
})
定时器回调函数
指向window对象
setTimeout(function () {
console.log(this); //window
}, 1000)