<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="btn" onclick="go()">btn</button>
<script>
/*
怎么理解函数内部this指向
tips: this取声明值,是在函数执行的时候确认,而不是在定义的时候确定
1 在普通函数中的this指向
*/
function go(){
console.log(this);
}
go()
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="btn">btn</button>
<script>
var btn =document.getElementById("btn");
btn.onclick =function(){
setTimeout(function(){
console.log(this);
},500)
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 4 call apply bind 函数关键字的指向
function fn1(){
console.log(this);
}
var obj ={
name:"vue"
}
fn1()
fn1.call(obj);
var fn2 =fn1.bind(obj);
fn2();
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 2 作为对象的方法去调用
// 3 在箭头函数中this指向问题
var name =window
var obj ={
name:"javascript",
sayName(){
console.log(this.name);
},
wait(){
setTimeout(function(){
console.log(this.name);
})
},
delay(){
setTimeout(()=>{
console.log(this.name);
})
},
layOUT(){
setTimeout(function(){
console.log(this.name);
}.bind(this))
},
print(){
var that =this;
setTimeout(function(){
console.log(this.name);
}.bind(that))
}
}
obj.sayName()
obj.wait()
obj.delay()
obj.layOUT()
obj.print()
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!--
5 class this
在class和构造函数中this指向new关键字实例化的对象
-->
<script>
class Person{
skill ="lisi";
constructor(name,age){
this.name =name;
this.age =age;
console.log(this);
}
}
var p =new Person("lisi",18);
console.log(p.name);
</script>
</body>
</html>