/*this:
* 1. 解析器在每次调用函数的时候都会传递一个隐含参数this,指向一个对象(称为函数执行的上下文对象)
* 2. 任何函数本质上都是通过某个对象来调用的,如果没有指定,则这个对象为window
* 3. 以方法的形式调用,this就指向调用方法的那个对象*/
/*总结:
* 1. test() window
* 2. p.test() p
* 3. new test() 新创建的对象
* 4. p.call/apply(obj) obj
* */
var name = '全局name' //var有变量提升,window中有name,换成let const window中无name
function fun(){
console.log(this.name)
}
let obj = {
name: "obj里name",
getName: fun
}
fun()
obj.getName()
function Fun(name) {
console.log(this)
this.name = name
this.getName = function(){
console.log(this)
return this.name
}
this.setName = function(name){
console.log(this)
this.name = name
}
}
Fun('li') //this为window
let p = new Fun() //此语句会执行,this为新创建的对象Fun,而p指向这个对象,所以也能说指向p
p.getName() //Fun对象(p) p.getName获得getName这个函数
let obj = {}
p.setName.call(obj,'wang') //obj
let x = p.setName() //Fun对象(p)
let y = p.setName
y() //window
function f1(){
function f2(){
console.log(this)
}
f2()
}
f1() //f1()其实就是执行f2(),而f2()没有调用,所以为window
几个例子深刻理解this
最新推荐文章于 2024-06-25 16:27:38 发布