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 PropertyGrid中使用Combobox选择值问题
Jun 13 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
Jul 03 Javascript
红米手机抢购的js代码
Mar 10 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
Apr 06 Javascript
javascript 用函数实现继承详解
May 28 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
Sep 17 Javascript
js转换对象为xml
Feb 17 Javascript
用vue封装插件并发布到npm的方法步骤
Oct 18 Javascript
Javascript通过控制类名更改样式
May 24 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
vue + axios get下载文件功能
Sep 25 Javascript
使用js实现单链解决前端队列问题的方法
Feb 03 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 事务处理数据实现代码
2010/05/13 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
AngularJS内置指令
2015/02/04 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
Python中的闭包实例详解
2014/08/29 Python
Python文件去除注释的方法
2015/05/25 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
汽车销售顾问求职自荐信
2014/01/01 职场文书
气象学专业个人求职信
2014/03/15 职场文书
出纳担保书范文
2014/04/02 职场文书
小学母亲节活动总结
2015/02/10 职场文书
班主任寄语2015
2015/02/26 职场文书
换届选举主持词
2015/07/03 职场文书