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 相关文章推荐
js局部刷新页面时间具体实现
Jul 04 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
sogou地图API用法实例教程
Sep 11 Javascript
JavaScript严格模式禁用With语句的原因
Oct 20 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
Oct 25 Javascript
JS随机排序数组实现方法分析
Oct 11 Javascript
web前端vue实现插值文本和输出原始html
Jan 19 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
Jan 08 Javascript
vue实现图片懒加载的方法分析
Feb 05 Javascript
js实现购物车商品数量加减
Sep 21 Javascript
详解Vue数据驱动原理
Nov 17 Javascript
使用Ajax实现进度条的绘制
Apr 07 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注入实例
2006/10/09 PHP
一个php作的文本留言本的例子(三)
2006/10/09 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
举例讲解Python中的算数运算符的用法
2015/05/13 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
Pyqt5实现英文学习词典
2019/06/24 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
django实现支付宝支付实例讲解
2019/10/17 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
中职招生先进个人材料
2014/08/31 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书