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

this是谁?

2015-09-13 21:37 676 查看
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的方法一般为实例对象的构造方法,不然的话将会污染全局变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript this