Javascript this关键字

转载 2016年06月01日 14:50:10

Javascript this关键字
经常this使用上比较混乱,所以总结一下。
Javascript中的this其实跟java、C++等oo语言的含义,其实没有什么太大不同,但是由于javascript自身的特殊性,函数既是函数也是对象,导致this容易混淆。有人说this指的是,调用函数的那个对象。为了与其他oo语言的this概念统一一下,说this指向当前对象也没有什么不妥。
情况一:纯粹的函数调用:

function test(){
  this.x = 1;
  alert(this.x);
}

test(); //这里对话框弹出内容为1
为了证明this就是全局对象,我对代码做一些改变:

var x = 1;
function test(){
alert(this.x);
}
test();//这里对话框弹出内容为1
var x = 1;
function test(){
  this.x = 0;
}
test();
alert(x); //这里对话框弹出内容为0而不是1

可见this此时为全局对象。这是因为此时调用test的对象为全局对象window,所以当前对象也就是this指向的对象为window

情况二:作为对象方法的调用
函数还可以作为某个对象的方法调用,这时this就指这个上级对象。

function test(){
    alert(this.x);
  }
  var o = {};
  o.x = 1;
  o.m = test;
o.m(); // 1

  
情况三 作为构造函数调用
所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。

function test(){
 this.x = 1;
}
var o = new test();
alert(o.x); // 1
运行结果为1。为了表明这时this不是全局对象,我对代码做一些改变:
var x = 2;
function test(){
 this.x = 1;
}
var o = new test();
alert(x); //2

运行结果为2,表明全局变量x的值根本没变。

情况四 作为字面量调用

var name='tt';
var test={
    name:'hh',
    tt:this.name
};
alert("name:"+test.tt);

运行结果是弹框内容为tt而不是hh。这种情况跟情况一类似

情况五 apply函数可以改变this的指向
apply()的参数为空时,默认调用全局对象

var x = 0;
function test(){
  alert(this.x);
}
var Q={};
Q.x = 1;
Q.m = test;
Q.m.apply(); //弹框内容为全局的x的0,而不是Q的x的1

若把最后一行改为Q.m.apply(Q);这句代码的意思是Q.m的this为Q,即此时test的this为Q,于是弹框内容为Q的x的1

JavaScript中this关键字含义及其最佳实践(一)

在JavaScript中this关键字非常灵活, 在不同的情况下有不同的含义. 对于初学者来说 比较难以掌握, 即使是有经验的开发人员, 亦容易犯错. Google 一下 understanding ...
  • FuDesign2008
  • FuDesign2008
  • 2014年01月18日 21:21
  • 2050

Javascript中的Generator函数和yield关键字

Javascript中的Generator函数和yield关键字 javascript   Erin 2016年11月14日发布 推荐 0 推荐 收藏 2 收藏,...
  • linuxheik
  • linuxheik
  • 2017年04月26日 15:49
  • 353

JavaScript中变量的定义方式

在JavaScript中,变量的定义方式主要有两种,一种是隐式定义,另一种是显式定义。 隐式定义是直接给变量赋值,如c=3;a="hello"; 显示定义是用var关键字来定义,声明时变量可以没有初始...
  • u012868077
  • u012868077
  • 2016年05月28日 23:31
  • 777

JavaScript中的一些关键字

本篇博客来讨论一下JavaScript中的一些关键字,其中包括:in,delete,typeof,instanceof,debugger,with。...
  • daguanjia11
  • daguanjia11
  • 2016年05月22日 18:22
  • 517

JavaScript中的this关键字,如何工作

ECMAScript Standard中定义this为 evaluates to the value of the ThisBinding of the current execution co...
  • yintianqin
  • yintianqin
  • 2017年03月20日 10:15
  • 183

js正则关键字详解

please enter your title
  • babybk
  • babybk
  • 2016年04月27日 14:46
  • 993

js中对this关键字的理解

this是Javascript语言的一个关键字。它代表函数运行时,自动生成的一个内部对象,只能在**函数内部使用**。 比如, 理解this指代什么的关键点在与: 看这个this指的是局部对象还是全局...
  • SprintMan
  • SprintMan
  • 2016年11月09日 23:24
  • 1079

Java中native关键字

今天在研究Java源代码,首先就是从Object研究起,Object类的第一个方法就是private static native void registerNatives();这个方法是静态的,并且使...
  • VICHOU_FA
  • VICHOU_FA
  • 2015年07月18日 11:29
  • 2285

Javascript(函数)整理

//匿名函数(函数没有名称) //函数存储在变量中,不需要函数名称,通常通过变量名来调用。 var x = function (a, b) {return a * b}; var z = x(4, 3...
  • ptspzy
  • ptspzy
  • 2015年06月08日 02:47
  • 386

浅谈JavaScript实现关键字文本高亮显示

前端通常是指网站的表现层和结构层。因此前端技术一般分为前端设计和前端开发,前端设计一般可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,现在最新的高级版本HTML5、CSS3,以及SVG等。 ...
  • zhouziyu2011
  • zhouziyu2011
  • 2017年04月15日 13:53
  • 1412
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Javascript this关键字
举报原因:
原因补充:

(最多只允许输入30个字)