对JavaScript中全局对象和作用域的一点点理解

在JavaScript中我们可以通过constructor来判断对象的类型。

如:arr.constructor == Array;

但不同的frame(或窗体)中判断时就会失效了,因为这时同样的对象有了不同的constructor。

开始不是很理解,认真学习了作用域后有了一些认识。

先看一个例子。

 

 1 <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
 2 < HTML >
 3 < HEAD >
 4    < TITLE >  Scope of function  </ TITLE >
 5 </ HEAD >
 6 < BODY >
 7 ExpandedBlockStart.gifContractedBlock.gif   < SCRIPT  LANGUAGE ="JavaScript" >
 8ExpandedSubBlockStart.gifContractedSubBlock.gif    function scope1(){
 9ExpandedSubBlockStart.gifContractedSubBlock.gif        function User()
10
11        }

12        this.user1 = new User();
13    }

14ExpandedSubBlockStart.gifContractedSubBlock.gif    function scope2(){
15ExpandedSubBlockStart.gifContractedSubBlock.gif        function User()
16
17        }

18        this.user2 = new User();
19    }

20    var s1 = new scope1();
21    var s2 = new scope2();
22    alert(s1.user1.constructor == s2.user2.constructor);
23  
</ SCRIPT >
24 </ BODY >
25 </ HTML >  
26
27

 

运行后弹出结果为false,也就是s1中的user1和s2中的user2的类型不同,但user1和user2都是User对象,且scope1和scope2中的User对象完全一样。

对于这种现象可以解释为两个User在不同的作用域下,所以他们的constructor是不同的。

从此可联想到在不同的frame或窗体中相同的对象的constructor不同,也是因为他们的作用域不同。

所以可以认为每个frame或窗体在运行时都会创建一个function,frame或窗体中的任何对象的作用域(即全局作用域)都在这个function中。

当然此处理解为创建一个function是由上面的例子联想到,实际上在每个frame或窗体创建时javascript解析器会初始化创建一个全局对象global object,这个全局对象拥有一些预定义的全局变量和全局方法,如Infinity, parseInt, Math,在此frame或窗体中定义的所有全局变量都是这个全局对象的属性。这个全局对象就是window。

转载于:https://www.cnblogs.com/zhyt1985/archive/2009/03/07/1405707.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值