JS学习—this关键字

15 篇文章 0 订阅

    this了解

  在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++C#Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的。

  javaScriptthis更是一个难以琢磨的东西,姜昊视频中对this解释是:一个依赖于使用它的执行环境而被解析的关键字。OK,什么意思呢?

  大家都知道JS是基于原型的面向对象的语言,在根本的原理上和其他面向对象是一样的,在C++this指针的理解可以归结于一句话:this指针指向当前的对象!也就是通过this指针来证明在很多个对象中间,自己这个对象中的成员,而不是其他对象的成员,并且this是固定指向运行时的当前对象。

  还回到JS中的this,网上对this的都有自己的解释,包括视频中的解释,不过根本意思都是一样的,个人理解this指向的是调用函数的那个对象。

  看一个简单的例子:

var name="J";  
function test(){
  alert("我的名字是"+this.name);
}  

test(); 

  例子很简单,调用test()方法后弹出的肯定是“我的名字是J”,其中this起了什么作用呢,我们一点点分析,首先我们定义了一个全局变量name,一个全局的function,然后调用test()也是全局的,我们知道JS中最初始的对象是window,所以我们在调用test方法是,this指向的对象是window

  如果我们这样写:

var obj={};  
var name="J";  
obj.name="JJ";  
obj.test=function (){
  alert("我的名字是"+this.name)
}

obj.test(); 

  显然弹出的不再是J而是JJ了,因为这里调用的函数所在的对象是obj,自然this.name就是obj.name


         function对象的call()apply()方法

 

  为什么会说到这两个方法,就是因为在JS区别于其他面向对象语言的一个特点,在JS中,由于JS的动态性(解释执行,当然也有简单的预编译过程),this的指向在运行时才确定。这个特性在给我们带来迷惑的同时也带来了编程上的自由和灵活,通过call()apply()方法,扩充函数赖以运行的作用域,使JS变得强大。


如何将事件附到对象之上:

这两个方法可以指定函数的执行环境,例如你想让方法在this引用window对象的情况下运行,那么就可以使用:

clickedLink.sayGoodBye.call(window);

clickedLink.sayGoodBye.apply(window);

 

如果执行的方法是有参数的则:

  apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组(arguments)。

  call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来(argument1,argument2,…)。他们的用途相同,都是在特定的作用域中调用函数。


    apply()实例应用

var x = 0;

function test(){

  alert(this.x);

}

var o={};

o.x = 1;

o.m = test;

o.m.apply(); //0

o.m.apply(o);//1


  apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。

如果把最后一行代码修改为 o.m.apply(o); 运行结果就变成了1,证明了这时this代表的是对象o


   小结

  总的来说,this的作用和应用都是很大的,在Jquery中更有体现,this的认识更需要的是在实践中发现问题,解决问题

评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值