你们都知道this在英文中就是指代词,在英文中this指的是主人公,可是在javascript中就没有那么简单,它在不一样的地方会指代不一样,总结起来有如下四种状况。javascript
1. 函数预编译过程this——>windowjava
function test(){
app
var a= 123;
函数
function b(){}
this
}
code
//预编译ip
AO{ 作用域
arguments:[1], io
this:window,console
c:1;
a:underfined,
b:function(){}
}
test(1);
2. 全局做用域 this——>window
3. call/apply能够改变函数运行时this指向
function Person(age,name){
<!--this发生改变指向了obj-->
this.name = name;
this.age = age;
}
var person = new Person('deng',100);
var obj = {} Person.call(obj,'cheng',300);
4. obj.func(); func()里面this指向obj
var obj = {
a:function(){
console.log(this.name)
<!-- 谁调用a,this就表明谁 ,这里的this就表明obj-->
},
name:'abc' ;
}
obj.a();
下面这段代码就能够很好的检验咱们本身对于this指代问题有没有掌握
var name = '222';
var a = {
name:"111",
say:function(){
console.log(this.name);
}
}
var fun = a.say;
fun();
//输出222 全局执行
a.say();
//输出111
var b ={
name:"333",
say:function(fun){
fun();
//222(没有人调用它,那就是预编译,此时的this指向window)
}
}
b.say(a.say);
//因此在这里输出的是全局变量222
b.say = a.say;
b.say();
//输出333
这就是在JavaScript中this指代的四种不一样状况。