浏览器解析器在调用函数时,每次都会向函数内部传递一个隐含的参数 this
,this
指向的是一个对象,该对象被称之为函数执行的上下文。
函数在定义的时候 this
是不确定的,只有在调用的时候才可以确定;函数的调用方式不同,this
的指向也会不同。
直接以函数的形式调用函数时 this 指向 window
var uname = 'window对象'
function fun() {
console.log(this.uname)
}
fun() // window对象
当函数作为一个对象的方法时,被该对象所调用,那么 this 指向的是该对象
var uname = 'window对象'
function fun() {
console.log(this.uname)
}
var obj = {
uname: '貂蝉',
thisName: fun
}
obj.thisName() // 貂蝉
构造函数中的 this 指向构造函数的实例;构造函数中的 this 其实是一个隐式对象,类似一个初始化的模型,所有方法和属性都挂载到了这个隐式对象身上,后续通过 new 关键字来调用,从而实现实例化
function Preson(uname, age, gender) {
this.uname = uname
this.age = age
this.gender = gender
this.show = function() {
console.log(this)
}
}
var student = new Preson('小小', 19, 'gril')
student.show()