Javascript this的理解

JavaScript中也有this,但这个this却与C++、C#或Java等语言的this不同。一般编程语言的this就是对象自己,而 JavaScript的this却并不一定!this可能是我,也可能是你,可能是他,反正是我中有你,你中有我,这就不能用原来的那个“自我”来理解 JavaScript这个this的含义了。为此,我们必须首先放下原来对象的那个“自我”。

 我们来看下面的代码:

function WhoAmI() //定义一个函数WhoAmI
{
  alert('I\'m ' + this.name + ' of ' + typeof (this));
};

WhoAmI(); //此时是this当前这段代码的全局对象,在浏览器中就是window对象,其name属性为空字符串。输出:I'm of object

var BillGates = {
  name: 'Bill Gates'
};

BillGates.WhoAmI = WhoAmI; //将函数WhoAmI作为BillGates的方法。

BillGates.WhoAmI(); //此时的this是BillGates。输出:I'm Bill Gates of object

var SteveJobs = {
  name: 'Steve Jobs'
};

SteveJobs.WhoAmI = WhoAmI; //将函数WhoAmI作为SteveJobs的方法。

SteveJobs.WhoAmI(); //此时的this是SteveJobs。输出:I'm Steve Jobs of object

WhoAmI.call(BillGates); //直接将BillGates作为this,调用WhoAmI。输出:I'm Bill Gates of object

WhoAmI.call(SteveJobs); //直接将SteveJobs作为this,调用WhoAmI。输出:I'm Steve Jobs of object

BillGates.WhoAmI.call(SteveJobs); //将SteveJobs作为this,却调用BillGates的WhoAmI方法。输出:I'm Steve Jobs of object

SteveJobs.WhoAmI.call(BillGates); //将BillGates作为this,却调用SteveJobs的WhoAmI方法。输出:I'm Bill Gates of object

WhoAmI.WhoAmI = WhoAmI; //将WhoAmI函数设置为自身的方法。

WhoAmI.name = 'WhoAmI';

WhoAmI.WhoAmI(); //此时的this是WhoAmI函数自己。输出:I'm WhoAmI of function
({
  name: 'nobody',
  WhoAmI: WhoAmI
}).WhoAmI();
 //临时创建一个匿名对象并设置属性后调用WhoAmI方法。输出:I'm nobody of object

从上面的代码可以看出,同一个函数可以从不同的角度来调用,this并不一定是函数本身所属的对象。this只是在任意对象和function元素结合时的一个概念,是种结合比起一般对象语言的默认结合更加灵活,显得更加超然和洒脱。



在JavaScript函数中,你只能把this看成当前要服务的“这个”对象。this是一个特殊的内置参数,根据this参数,您可以访问到“这个”对象的属性和方法,但却不能给this参数赋值。在一般对象语言中,方法体代码中的this可以省略的,成员默认都首先是“自己”的。但JavaScript却不同,由于不存在“自我”,当访问“这个”对象时,this不可省略!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值