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 相关文章推荐
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
JS实现随机数生成算法示例代码
Aug 08 Javascript
求数组最大最小值方法适用于任何数组
Aug 16 Javascript
jQuery中contents()方法用法实例
Jan 08 Javascript
jQuery中使用each处理json数据
Apr 23 Javascript
JavaScript DOM 学习总结(五)
Nov 24 Javascript
微信小程序 登陆流程详细介绍
Jan 17 Javascript
详谈js中数组(array)和对象(object)的区别
Feb 27 Javascript
使用socket.io制做简易WEB聊天室
Jan 02 Javascript
Vue 配合eiement动态路由,权限验证的方法
Sep 26 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
Nov 09 Javascript
vue生命周期钩子函数以及触发时机
Apr 26 Vue.js
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
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
php动态变量定义及使用
2015/06/10 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
Angularjs 制作购物车功能实例代码
2016/09/14 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
python简单实现获取当前时间
2016/08/27 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
Python查看微信撤回消息代码
2018/06/07 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
Python API len函数操作过程解析
2020/03/05 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
考博专家推荐信模板
2013/12/02 职场文书
群众路线批评与自我批评
2014/02/06 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
docker 制作mysql镜像并自动安装
2022/05/20 Servers
Java使用HttpClient实现文件下载
2022/08/14 Java/Android