解析JS中this关键字

this是javascript语言的一个关键字。它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。
记住:t his 永远指向其所在函数的所有者,如果没有所有者,指向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.οnclick=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]);
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值