Javascript 陷阱 window全局对象


Posted in Javascript onNovember 26, 2008

function Test(){
this.name='Test';
var name=2;
this.show=function(){
alert(name);
alert(this.name);//显示名字
}
}
var test=new Test();//通过构造器创建一个对象
test.show();//输出2和'Test' ,说明对象方法访问其属性时必须加this.

function Test2(){
this.name='Test2';
this.show=function(){
alert(name);
alert(this.name);
}
}
Test();//直接调用Test();
var test2=new Test2();
test2.show();//输出了Test,Test2,很奇怪啊,name问什么有值了,而且怎么会是'Test',bug?
alert(name);
window.show(); //输出2,test;怎么会有show函数呢,难道是bug

//依次输出2,Test;Test,Test2;Test;2,Test

// ff和ie6下都是同样的运行结果,看来不是bug,那究竟是为什么呢?
// 注意到:对象方法访问其对象的属性时|必须|加以this.(和java不一样).
// 整个页面是默认的是|window|对象,那么定义的函数,默认就是window对象的方法。
//直接直接调用函数时,相当于通过window.调用方法,那么方法内部的this自然就是\
//window对象,this.name='Test'就是为window对象加了一个属性.
// 那么当方法局部作用域内未定义name且调用alert(name),就相当于调用alert(window.name);
/*啊,代码混乱了。这看起来像一个很严重的陷阱!!*/

Javascript 相关文章推荐
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
Jan 07 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
Aug 01 Javascript
jQuery学习笔记之jQuery动画效果
Sep 09 Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 Javascript
JS实现的仿QQ空间图片弹出效果代码
Feb 23 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
May 16 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
Jul 06 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
Mar 11 Javascript
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
Node.js  REPL (交互式解释器)实例详解
Aug 06 Javascript
node中的session的具体使用
Sep 14 Javascript
详解如何在Canvas中添加事件的方法
Apr 17 Javascript
Javascript 对象的解释
Nov 24 #Javascript
javascript脚本调试方法小结
Nov 24 #Javascript
createElement动态创建HTML对象脚本代码
Nov 24 #Javascript
javascript innerHTML、outerHTML、innerText、outerText的区别
Nov 24 #Javascript
javascript call和apply方法
Nov 24 #Javascript
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
Nov 24 #Javascript
javascript 贪吃蛇实现代码
Nov 22 #Javascript
You might like
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
原生js实现验证码功能
2017/03/16 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
python服务器端收发请求的实现代码
2014/09/29 Python
Python的Django框架使用入门指引
2015/04/15 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
浅谈sklearn中predict与predict_proba区别
2020/06/28 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
教育局长自荐信范文
2013/12/22 职场文书
摄影助理岗位职责
2014/02/07 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
军训决心书范文
2015/09/22 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL