在JavaScript中this到底指代什么?

       你们都知道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指代的四种不一样状况。      

相关文章
相关标签/搜索