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

JS学习—this关键字

2013-12-12 21:41 603 查看
this了解

  在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++、C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的。
  javaScript中this更是一个难以琢磨的东西,姜昊视频中对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(); //0o.m.apply(o);//1


  apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
如果把最后一行代码修改为 o.m.apply(o); 运行结果就变成了1,证明了这时this代表的是对象o

   小结

  总的来说,this的作用和应用都是很大的,在Jquery中更有体现,this的认识更需要的是在实践中发现问题,解决问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: