Javascript 陷阱-window全局对象

  1.     function Test(){
  2.         this.name='Test';
  3.         var name=2;
  4.         this.show=function(){
  5.             alert(name);
  6.             alert(this.name);//显示名字
  7.         }
  8.     }
  9.     var test=new Test();//通过构造器创建一个对象
  10.     test.show();//输出2和'Test' ,说明对象方法访问其属性时必须加this.
  11.     
  12.     function Test2(){
  13.         this.name='Test2';
  14.         this.show=function(){
  15.             alert(name);
  16.             alert(this.name);
  17.         }
  18.     }
  19.     Test();//直接调用Test();
  20.     var test2=new Test2();
  21.     test2.show();//输出了Test,Test2,很奇怪啊,name问什么有值了,而且怎么会是'Test',bug?
  22.     alert(name);
  23.     window.show(); //输出2,test;怎么会有show函数呢,难道是bug
  24.     //依次输出2,Test;Test,Test2;Test;2,Test
  25.     // ff和ie6下都是同样的运行结果,看来不是bug,那究竟是为什么呢?
  26.     // 注意到:对象方法访问其对象的属性时|必须|加以this.(和java不一样).
  27.     // 整个页面是默认的是|window|对象,那么定义的函数,默认就是window对象的方法。
  28.     //直接直接调用函数时,相当于通过window.调用方法,那么方法内部的this自然就是/
  29.     //window对象,this.name='Test'就是为window对象加了一个属性.
  30.     // 那么当方法局部作用域内未定义name且调用alert(name),就相当于调用alert(window.name);
  31.     /*啊,代码混乱了。这看起来像一个很严重的陷阱!!*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值