1. 普通函数中的this指向
function fn(){
console.log(this)
}
fn()
普通函数this指向global也就是window
2. 定时器方法中的this指向
setInterval(function(){
console.log(this)
},2000)
setTimeout(function () {
console.log('this',this)
},3000)
定时器this指向window
3. 构造函数中的this指向
function a(){
console.log(this)
this.aa = function (){
console.log(this)
}
}
a()
普通函数this指向window(global)
function a(){
console.log(this)
this.aa = function (){
console.log(this)
}
}
var A = new a()
A //a {}
console.log(a.prototype) //a {}
console.log(A.__proto__) //a {}
构造函数中this指向构造函数的实例对象a{}同于原型链原型对象
4. 对象方法中的this指向
function a(){
console.log(this)
this.aa = function (){
console.log('this',this)
}
}
var A = new a()
A.aa()
//a {}
//this a { aa: [Function] }
对象方法中的this指向实例对象
5. 原型对象方法中的this指向
function a(){
a.prototype.aa = function (){
console.log('this',this)
}
}
var A = new a()
A.aa() //this a{}
原型对象方法中的this指向实例对象
6. call()与apply() 改变this指向
function fn(name,age){
console.log(this,name,age)
}
fn.call(1,'aaa',10) //[Number: 1] 'aaa' 10
fn.call({a:10,b:20},'bbb',20) //{ a: 10, b: 20 } 'bbb' 20
fn.apply(1,['aaa',10]) //[Number: 1] 'aaa' 10
fn.apply({a:10,b:20},['bbb',20]) //{ a: 10, b: 20 } 'bbb' 20