<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script>
// this是JS中的一个关键字, 代表函数运行时再其内部自动实现的一个内部对象,只能在函数内部调用
// this的指向就是调用函数的那个对象
function test(){
this.x=1
}
// 具体情况,具体分析,下面列出this的4钟情况
// 1 纯函数调用,this指向全局, window
function test1(){
this.x=1;
console.log(this.x)
}
test1()//1
// 为了证明this这个时候是指向全局,
var x=100;
function test2() {
console.log(this.x)
}
test2();//100
// 同时因为this指向全局, 这个时候改变this.x的值,就可以改变全局下的x的值
var a=20;
function test3(){
var a=10;
this.a=0;
}
test3();
console.log(a)//变成了0
// 但是可以改变this的指向
var a1=10;
function test4(){
var _this=this;
_this.a1=0;
}
console.log(a1);
// 2 函数作为一个对象的方法去调用,this就指向这个上级对象
function obj(){
console.log(this.x)
}
var o={};
o.x=1;
o.test=obj;
o.test();//1
// 3 作为构造函数调用,通过这个函数生成一个新对象, 这样这个this旧指向这个新生成的对象
function test5(){
this.x = 1;
}
var ob = new test5();
ob.x; // 1
// 4 apply调用,改变函数的调用对象,即改变this的指向, 第一个参数就代表改变后的调用这个函数的对象。即this所指向的
var xo = 0;
function testq(a){
console.log(this.xo+a)
}
var ob={
xo:1,
m:testq
};
//ob.m.apply(); //0
//ob.m.apply(ob,[5])//6 apply把this的指向改变成ob自己。
//ob.m.call(ob,5)//6 call把this的指向改变成ob自己。
//无论call 和apply 都是改变指向后立刻就执行,调用
var bindd=ob.m.bind(ob,5);
bindd();
// bind是改变指向后,返回一个新的函数,然后再再次执行调用这个新的函数
</script>
</html>