javascirpt中window和global的联系

1 js中global对象的含义是什么?它是否真实存在? 

 

2 为什么js中的全局对象是window? 是怎么实现的? 

 

首先看第一个问题,直接在网页中alert(global); 是会出错的,所以这个global对象其实是不存在的,global是一个抽象的概念,代表js中的全局对象,在web中js 的全局对象表现为window. 所以说global是个抽象的概念,而在web中window就是对global的实现,window是可以直接访问的,它是真实存在的,而global是虚拟的,不存在的. 

 

关于第二个问题,为什么js中会有window这个全局变量呢? js只是一种脚本,它所有的意义都是解析器赋与的.所以我们得看解析器是怎么解析window的. 与js对象定义的位置划分js对象可以划分为外部定义对象与内置对象,外部定义对象指的是在js代码中定义的,而内置对象是指在js解析器内部定义的. 在chromium中定义内置对象定义有两种方法,一种是直接在v8引擎中定义,一种是通过v8引擎的扩展文件.idl调用到对应的c++对象,所有的内置js对象都有一个c++对象与之对象. Window js对象是通过widnow.idl中定义的,它的源码在webkitsource/core/frame中.  首先看 window.idl 中定义开头的地方: 

[

    CheckSecurity=Receiver,

    ImplementedAs=DOMWindow,

    PrimaryGlobal,

 

ImplementedAs 指定了它的实现 c++类, PrimaryGlobal 指定了window对象是全局的对象,.idl是chromium 中实现扩展js一种机制,简单的说它就是js和c++对象串联起来的一座桥梁,搞清楚.idl机制对于理解内置js对象在webkit中的实现是非常重要的,关于idl详细规则可以参考chromium工程的官方网站(http://www.chromium.org/developers/design-documents/idl-compiler 可能需要梯子) ,它会由python解析成对应的V8window 类,然后v8window的类调用到了继承于DOMWindow的LocalDomWindow.  在js中所有的属性和方法都是源自于window的,所以可以在window.idl 中发现其它所有的 window属性和方法. 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值