什么是this?
this是一个关键字,不能被当做变量去赋值;
指向:
this的指向分为全局作用域跟函数作用域
在全局中,this关键字固定指向window;
在函数中,this关键字的指向取决于函数是如何调用的;
下面举例说明:
在全局中
console.log(this);//this指向window
在函数中(直接调用)
var fn = function(){
console.log(this);
}
var obj = {
a:1,
b:fn
}
fn();//此时this指向window
这里的函数是直接调用的,所以this是指向window
在函数中(对象名调用)
var fn = function(){
console.log(this);
}
var obj = {
a:1,
b:fn
}
obj.b();//此时this指向obj这个对象
这里的函数是对象名.函数调用的,所以this就指向这个对象
下面我们再来看一种情况
var obj = {
fn:function(){
console.log(this);
}
}
obj['fn'](); //这里的this依然是指向obj
很多人都觉得这里是直接调用函数,this应该是指向window
其实依然是通过对象.函数名()
由此可以得到总结,谁调用,this就指向谁!
为什么要用this?
来看下面这段代码
var objLiubo = {
name:'jak',
age:88,
gender:'男',
girlFriend:'100',
sayHello:function(){
console.log('大家好,我是jak,我有100个女朋友');
}
}
现在我要将girlfriend改成101,该怎么去改?
不用this的方式
var objLiubo = {
name:'jak',
age:88,
gender:'男',
girlFriend:'100'//在这把100改为101
sayHello:function(){
console.log('大家好,我是jak,我有100个女朋友');//然后还要手动把这里的100改成101
}
}
大家思考一个问题,这只是一个变量的值需要改变,这种方法不太费劲,要是一千个变量的值要修改呢?一万个呢? 那恐怕人会疯掉,所以我们调用this关键字解决。
this的方式
var jak = {
name:'jak',
age:88,
gender:'男',
girlFriend:'100',//只需要改一下这个变量的值
sayHello:function(){
console.log(`大家好,我叫jak,我有${this.girlFriend}个女朋友`);//将100用this改成一个变量得形式
}
}
这样只需要改一下变量的值,里面的输出语句的值也会随之改变。也就不会这样麻烦了!