本地对象:独立于宿主环境的ECMAScript实现提供的对象。常见的本地对象有:Object、Function、Array、String、Boolean、Number 、Date、RegExp、Error等。
内置对象:内置对象不需要实例化,主要是Global对象和Math对象;
Global对象:它是ECMAScript中最特别的对象,因为实际上它根本不存在,但大家要清楚,在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。类似于parseFloat( )、parseInt( )、escape( )、unescape( )、isFinite( )、isNaN( )、eval( )、encodeURI()和 encodeURIComponent(),看起来都是函数,而实际上,它们都是Global对象的方法。
window对象:ECMAScript 没有指出如何直接访问 Global 对象,但浏览器都是将Global对象作为window 对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了 window对象的属性。
Global对象和Window对象的对比
而Global对象是在任何环境中都存在的。
全局函数和window对象的函数不一样。全局函数不属于任何一个内置对象。
跟继承没有关系,可以认为浏览器默认提供使用的对象,都放到了Global对象中,而window对象又恰好就是这个Global对象。实际上,在浏览器的内部实现中,隐藏了真正的Global对象,而把window对象作为了Global对象的替身。一切对Global对象的操作(间接操作),都会映射到window对象上,反之亦然。这样window对象就成了Global对象的替身。而window对象同时又作为Global对象的一个属性。这样,真正的Global对象就被雪藏了。
实际应用:
1.加密js中,如果想对Global对象对象加密,可以用一个特殊的变量注册到window里。例如:
window['_ab'] = window['parseInt'] var a = _ab('234'); console.log(a,'打印');
这样就实现了一个简单的js加密。常用的,可以使用这种方式加密的:Date,Math,parseInt,parseFloat,Array等
2.对js对象方法的加密。例如:getTime方法
window['_df'] = window['Date'] window["_w3"] = 'getTime' var b = new _df() var c = b[_w3]() console.log(c,'打印')
或者可以利用闭包
window['_df'] = window['Date'] window["_w3"] = _vP('getTime') function _vP (_BT) { return function () { return _BT } } var b = new _df() var c = b[_w3()]() console.log(c,'打印')