首页 > 语言 > JavaScript > 正文

javascript中this用法实例详解

2024-05-06 15:18:55
字体:
来源:转载
供稿:网友

本文实例讲述了javascript中this用法。分享给大家供大家参考,具体如下:

JavaScript中的this含义非常丰富,它可以是全局对象,当前对象或者是任意对象,这都取决于函数的调用方式。函数有以下几种调用方式:作为对象方法调用、作为函数调用、作为构造函数调用、apply或call调用。

对象方法调用

作为对象方法调用的时候,this会被绑定到该对象。

var point = { x : 0, y : 0, moveTo : function(x, y) {   this.x = this.x + x;   this.y = this.y + y;   }};point.moveTo(1, 1)//this 绑定到当前对象,即 point 对象

这里我想强调一点内容,就是this是在函数执行的时候去获取对应的值,而不是函数定义时。即使是对象方法调用,如果该方法的函数属性以函数名的形式传入别的作用域,也会改变this的指向。我举一个例子:

var a = {  aa : 0,  bb : 0,  fun : function(x,y){    this.aa = this.aa + x;    this.bb = this.bb + y;  }};var aa = 1;var b = {  aa:0,  bb:0,  fun : function(){return this.aa;}}a.fun(3,2);document.write(a.aa);//3,this指向对象本身document.write(b.fun());//0,this指向对象本身(function(aa){//注意传入的是函数,而不是函数执行的结果  var c = aa();  document.write(c);//1 , 由于fun在该处执行,导致this不再指向对象本身,而是这里的window})(b.fun);

这样就明白了吧。这是一个容易混淆的地方。

函数调用

函数也可以直接被调用,这个时候this被绑定到了全局对象。

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

但这样就会出现一些问题,就是在函数内部定义的函数,其this也会指向全局,而和我们希望的恰恰相反。代码如下:

var point = { x : 0, y : 0, moveTo : function(x, y) {   // 内部函数   var moveX = function(x) {   this.x = x;//this 绑定到了全局  };  // 内部函数  var moveY = function(y) {  this.y = y;//this 绑定到了全局  };  moveX(x);  moveY(y);  }};point.moveTo(1, 1);point.x; //==>0point.y; //==>0x; //==>1y; //==>1

我们会发现不但我们希望的移动呢效果没有完成,反而会多出两个全局变量。那么如何解决呢?只要要进入函数中的函数时将this保存到一个变量中,再运用该变量即可。代码如下:

var point = { x : 0, y : 0, moveTo : function(x, y) {   var that = this;   // 内部函数   var moveX = function(x) {   that.x = x;   };   // 内部函数   var moveY = function(y) {   that.y = y;   }   moveX(x);   moveY(y);   }};point.moveTo(1, 1);point.x; //==>1point.y; //==>1

构造函数调用

在javascript中自己创建构造函数时可以利用this来指向新创建的对象上。这样就可以避免函数中的this指向全局了。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选