181 this指向问题
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,一般情况下this的最终指向的是那个调用它的对象。
现阶段,我们先了解一下几个this指向
-
全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window) 【全局作用域下的变量、函数会作为window对象的属性、方法,只是通常省略window。】
-
方法调用中谁调用this指向谁 【即对象中的方法指向对象自己。】
-
构造函数中this指向构造函数的实例。
// this 指向问题 一般情况下this的最终指向的是那个调用它的对象
// 1. 全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)
console.log(this);
function fn() {
console.log(this);
}
window.fn();
window.setTimeout(function() {
console.log(this);
}, 1000);
// 2. 方法调用中谁调用this指向谁
var o = {
sayHi: function() {
console.log(this); // this指向的是 o 这个对象
}
}
o.sayHi();
var btn = document.querySelector('button');
// btn.onclick = function() {
// console.log(this); // this指向的是btn这个按钮对象
// }
btn.addEventListener('click', function() {
console.log(this); // this指向的是btn这个按钮对象
})
// 3. 构造函数中this指向构造函数的实例
function Fun() {
console.log(this); // this 指向的是fun 实例对象
}
var fun = new Fun();
this
函数执行的主体(不是上下文): 意思是谁把函数执行的,那么执行主体就是谁。
【
我
去北京饭店
吃饭,我是主体,北京饭店是上下文。】THIS非常的不好理解,以后遇到THIS,想一句话:“你以为你以为的就是你以为的”
-
给元素的某个事件绑定方法,当事件触发方法执行的时候,方法中的this是当前操作的元素本身。
-
如何确定执行主体(this)是谁?
当方法执行时候,我们看方法前面是否有点:
(1)没有点,this是window 或 undefined;
(2)有点,点前面是谁this就是谁。
var name = '杰帅';
function fn(){
console.log(this.name);
}
var obj = {
name: "你好世界",
fn: fn
};
obj.fn(); // => this: obj 【前面有点】
fn(); // => this: window(非严格模式是window,严格模式下是undefined) window.fn()把window.省略了
(function(){
//自执行函数中的this是window 或 undefined
})();