网络编程 
首页 > 网络编程 > 浏览文章

Javascript 陷阱 window全局对象

(编辑:jimmy 日期: 2025/5/15 浏览:3 次 )
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 hasOwnProperty 方法 & in 关键字
下一篇:javascript 随意拖动的小方块特效
一句话新闻
高通与谷歌联手!首款骁龙PC优化Chrome浏览器发布
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 网站地图 SiteMap