- 如果是该函数是一个构造函数,this指针指向一个新的对象
- 在严格模式下的函数调用下,this指向undefined
- 如果是该函数是一个对象的方法,则它的this指针指向这个对象
一般来说,最常见的就是上述第三种情况,this最终指向的是调用它的对象。也就是说,在这种情况下,当this所在的函数被调用时,this才得以确定。
var obj1 = {
foo:'小吉良1',
a:function a(){
console.log(this.foo);
}
}
var obj2 = {
foo:'小吉良2',
a:obj1.a
}
obj1.a();//小吉良1
obj2.a();//小吉良2
但是有几种特殊情况
- 非严格模式下,全局作用域下的函数调用对象默认是window。
function a(){
var foo = "小吉良";
console.log(this.foo);
console.log(this);
}
a();
//undefined
//Window
- 多级对象调用时,this指向最近的那层调用它的对象
var foo = 'window小吉良'
var obj = {
foo:'小吉良',
a:function a(){
console.log(this.foo);
}
}
window.obj.a()//'小吉良'
3.箭头函数的this,是调用它的对象的this,注意是调用它的对象的this,不是调用它的对象
var foo = 'window name'
var obj = {
foo: 'obj name',
sayN: () => {
console.log(this.foo)
}
}
obj.sayN() //window name