您的位置:首页 > Web前端 > JavaScript

解析JS中this关键字

2016-05-10 21:23 274 查看
this是javascript语言的一个关键字。它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。
记住:this 永远指向其所在函数的所有者,如果没有所有者,指向window。意思就是this所在函数被谁调用的,就指向谁。

1)全局函数中的this指向
默认绑定全局变量,当函数被单独定义和调用的时候,应用的规则就是绑定全局变量。
在JavaScript的变量作用域里有一条规则“全局变量都是window对象的属性“。

function test(){
alert(this);
}
test()这个函数没有所有者,是一个全局函数,属于window对象,因此此时this指向的是window

2)对象方法中的this指向
隐式调用,函数调用时拥有一个上下文对象,就好像这个函数是属于该对象的一样。

obj.test =function(){
alert(this==obj); //true
}
obj.test表示的是test这个函数的所有者是对象obj,函数是作为对象obj的方法调用的,因此this应当是指向obj对象

3)绑定函数时的this
如下代码,test1和test2中this并不相同:
var test2 = o.test1;
test2();
o.test1 =function(){
alert(this===o);
}
test2这个函数并没有所有者。test2虽然调用了test1这个函数,但是this仍然指向window,而不是指向test1的拥有者:对象o
这便是上面所说的,要将函数与函数名分开看待

此时如果我们对3)中的代码进行一些修改:
function test (){

alert(this=== o);

}

test();//this指向window

var o ={};

o.test2 = test;

o.test2();//此时test2的所有者为o,而test没有所有者,this在此时指向的是o
alert(o.test2);

4)鼠标单击事件等进行函数的绑定时,this的指向

document.onclick=function(){
alert(this===document); //输出为true,
}
onclick事件的拥有者是document。因此,此处this指向document。

5)构造函数中的this
通过构造函数可以生成一个新对象,this就指向这个新对象。
function test(){
this.x = 1;
}
var object = new test();
alert(object.x); // 1

6)改变this指向—apply()、call()
可以通过apply()\call() 改变函数的调用对象,切换函数执行的上下文环境(context),即 this 绑定的对象
apply的用法和call的用法大致相同,区别在于第二个参数:
apply只接受两个参数,第一个参数和call相同(指定该函数将被哪个对象所调用),第二个参数必须是一个数组;
call则作为call的参数传入。
如: func.call(thisobj,var1,var2,var3);
  func.apply(thisobj,[var1,var2,var3]);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: