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 相关文章推荐
JavaScript中使用构造函数实现继承的代码
Aug 12 Javascript
js对table的td进行相同内容合并示例详解
Dec 27 Javascript
JavaScript实现点击单元格改变背景色的方法
Feb 12 Javascript
微信开发 消息推送实现代码
Oct 21 Javascript
微信小程序wx.previewImage预览图片实例详解
Dec 07 Javascript
详解Nuxt.js Vue服务端渲染摸索
Feb 08 Javascript
p5.js入门教程之键盘交互
Mar 19 Javascript
JavaScript常用数学函数用法示例
May 14 Javascript
vue如何引入sass全局变量
Jun 28 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 Javascript
JS实现的RC4加密算法示例
Aug 16 Javascript
JavaScript实现两个数组的交集
Mar 25 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
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
Python文件读写常见用法总结
2019/02/22 Python
高一自我鉴定
2013/12/17 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
python​格式化字符串
2022/04/20 Python