this是谁?
2015-09-13 21:37
676 查看
JavaScript中的this跟面向对象语言中的this有些区别,在实际编码中需要注意一些小问题。
name相当于是一个全局变量,类似于:window.name = 'pxd';
temp变量也相当于一个全局变量,类似于:widnow.temp = obj.t;
因此,t()函数中的this指向的就是window,也就是window.name,结果就是pxd。
这里要看明白,需要理解一点,就是(...)();第一个括号的内容是一个表达式,那这个表达式的值是多少呢?
其实这个表达式的值就是t函数,将上面的代码转换一下就是如下形式:
因此,这个方法即不是dog调用的,也不是obj调用的,相当于(null.t())();,这里的null(调用者)被编译器解释成全局的window了,所以结果是pxd。
注意点:
一般的方法请不要使用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的方法一般为实例对象的构造方法,不然的话将会污染全局变量。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式
- Flex结合JavaScript读取本地路径的方法
- PowerShell中执行Javascript的方法示例
- javascript asp教程第六课-- response方法
- javascript asp教程More About Recordsets
- javascript asp教程第十二课---session对象
- javascript asp教程创建数据库连接