this是谁?

JavaScript中的this跟面向对象语言中的this有些区别,在实际编码中需要注意一些小问题。


		name = 'pxd';
		var obj = {name:'java', t:function(){
			alert(this.name);
		}};
		var temp = obj.t;
		temp(); //pxd

name相当于是一个全局变量,类似于:window.name = 'pxd';

temp变量也相当于一个全局变量,类似于:widnow.temp = obj.t;

因此,t()函数中的this指向的就是window,也就是window.name,结果就是pxd。


		name = 'pxd';
		var obj = {name:'java', t:function(){
			alert(this.name);
		}};
		var dog = {name:'php'};
		(dog.t = obj.t)(); //pxd


这里要看明白,需要理解一点,就是(...)();第一个括号的内容是一个表达式,那这个表达式的值是多少呢?

其实这个表达式的值就是t函数,将上面的代码转换一下就是如下形式:


		name = 'pxd';
		(function(){
			alert(this.name);
		})();

因此,这个方法即不是dog调用的,也不是obj调用的,相当于(null.t())();,这里的null(调用者)被编译器解释成全局的window了,所以结果是pxd。


注意点:

一般的方法请不要使用this,带this的方法一般为实例对象的构造方法,不然的话将会污染全局变量。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shadon178

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值