为啥用this
由于自己比较菜,对为啥要用this的理解就是方便、简洁,可以隐式的传递一个对象的引用,让代码逻辑简洁,方便。
this的指向问题
误解一:this指向函数自身
var a = 1
function test() {
var a = 2
console.log(this.a)
}
test()
// 1
如果this指向函数自身,那么应该输出2
误解二:this指向函数
var a = 1
function test () {
var a = 2
fun()
}
function fun() {
console.log(this.a)
}
test()
// 1
如果this可以指向函数,那么应该输出2
this到底指向哪?
首先要知道到this是函数里自带的一个特殊对象,this的指向是在函数执行时所确定的,this既不指向函数自身,也不指向函数。函数在哪调用,this指向哪。看个栗子
var a = 1
function fun () {
console.log(this.a)
}
fun()
// 1
这里fun函数在全局调用,那么fun的this就指向全局,也就是window对象。
var a = 2
obj = {
a: 1,
fun: fun
}
function fun() {
console.log(this.a)
}
obj.fun()
// 1
上面栗子中,fun在obj中调用,fun中的this指向obj。
var a = 1
function fun () {
var a = 2
return fun1
}
function fun1() {
var a = 3
console.log(this.a)
}
fun()()
// 1
上面代码中,先执行fun方法,返回fun1方法,接着执行fun1,fun1还是在全局环境中执行,所以,不管你怎么引用或者返回,函数中的this就是那个对象调用函数,this就指向谁!!!
function test() {
console.log('test',this)
function fn() {
console.log('fn', this)
}
fn()
}
let obj = {
test: test
}
obj.test()
// tset: obj
// fn: window
上面代码,test()作为obj的一个属性被obj调用,this指向obj,fn在test()中执行,没人调用它,那他的this就tm指向window。