this存在的场景
1)作为普通函数中的this
2)使用call apply bind
3)作为对象方法被调用
4)在class中被调用
5)箭头函数:this的取值,是上级函数的取值
this的值,是在函数执行时确定的,不是在定义的时候确定的
2)bind 将一个方法应用到另一个对象上
zhang.say.call({name:"www"})// www
3)作为对象方法被调用
var *zhang*={
name:"zs",
say(){
*console*.log(this.name);
},
wait(){
setTimeout( function(){
*console*.log(this);//window
})
}
}
zhang.wait()//window 匿名函数是全局作用域的
5)箭头函数的this取值是上级作用域
var *zhang*={
name:"zs",
say(){
*console*.log(this.name);
},
wait(){
setTimeout( ()=>{
console.log(this);//object[zhang]
})
}
}
zhang.wait()
this指向问题
当函数被调用时,我们看紧邻括号“()”的左边。如果在括号的左侧存在一个引用,传递给调用函数的“this”值是引用所属于的那个对象,否则this的值就是全局对象。
console.log(this) //window
console.log(typeof this);//object
console.log(this == *window*);//true
function A() {
function B() {
console.log(this) //window
console.log(typeof this);//object
console.log(this == *window*);//true
}
B()
}
A()
obj调用了这个方法,this指向为obj
var *obj*={
name:"这是一个对象",
objFun:function () {
console.log(this); //object naem:""
console.log(typeof this);//object
console.log(this === *window*);//false
console.log(this.name);//这是一个对象
}
}
obj.objFun()
虽然这个方法是obj的,但是obj没有调用它,this指向window
var obj={
name:"这是一个对象",
objFun:function () {
console.log(this); //window
console.log(typeof this);//object
console.log(this === window);//true
console.log(this.name);//
}
}
var test=obj.objFun
test()
var name ="window"
var obj={
name:"第一层obj",
objBar:{
name:"第二层obj",
barFun:function () {
console.log(this.name);
}
}
}
var test1=obj.objBar.barFun()//第二层obj
var test2=obj.objBar.barFun
test2()//window
var test3=obj.objBar;
var testBar=test3.barFun
testBar()//window
此题this指向哪里==>不知道,没人调用不知道指向谁
function f() {
console.log(this);
}
this总是指向函数的直接调用者(而非间接调用者)
网友评论