this指向及改变this指向

本文深入探讨JavaScript中this关键字的指向规则,包括全局作用域、事件处理、函数调用及new操作符的情况,并详解call与apply如何改变this的指向。

1.全局下的this指向window

this.a=1;
alert(window.a); //1

2.事件里面的this指向事件源

var obj=document.getElementById('oDiv');
obj.onclick=function(){   
  alert(this.innerHTML) ;//这里的this指向obj
}

3.函数中的this谁调用就指向谁

var o={
  name:'liuhua',
  test:function(){
  alert(this.name)
  }
}
o.test();  //liuhua,这里函数由o调用,指向O
//注意:
var ff=o.test;
ff();  //此时this指向ff

4.由new调用? 绑定到新创建的对象。

call与apply改变this指向

call()

function.call(obj[,arg1[, arg2[, [,.argN]]]]])

调用call的对象必须是个函数function

call的第一个参数将会是function改变上下文后指向的对象(想要this指向谁)

第二个参数开始可以接收任意个参数,这些参数将会作为function的参数传入function

apply()

function.apply(obj[,argArray])

call方法的使用基本一致,但是只接收两个参数,其中第二个参数必须是一个数组或者类数组

var o={
    name:'cj',
    print:function(){
        alert(this.name);
       }
   }
 function log(a,b){
     alert(this[a]); 
     alert(this[b]);
   };
//本来指向window,通过call,apply方法指向了O对象,所以才能读取到name,全局下是没有name的
log.call(o,'name','age');   //cj    undefined
log.apply(o,['name','age']);   //cj   undefined

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值