javascript中的全局对象,全局对象是一个父级的构造,所有的其他的对象,变量和函数都属于全局对象。还有一种是Object对象,javascript中的其他对象都是从Object继承而来,包括内置对象。
一全局对象
1 全局对象的特性
全局对象是顶层的上下文环境,其他所有对象都属于全局对象。在web开发中,全局对象为作用域提供了最顶层的上下文环境,并为web开发所依赖的某些高层浏览器功能提供了共享的平台。除此之外,全局对象还包括以下内容:
对于作用域,全局对象也提供了非常有用的功能。当引用一个变量时,在当前作用域中并未找到该变量时,解释器就会沿着作用域链向上移动,并沿着作用域链查找该变量,直到查到全局对象。如果始终无法找到该变量,解释器会认为该变量不存在,并触发一个异常,当在全局作用域中时,可以使用关键字this访问全局对象。
2 浏览器中的全局对象
在浏览器中,全局对象有着特殊的用途。除保存javascript中所有普通功能和作为全局上下文环境外,还容纳了大量特定于浏览器的对象。例如window和document对象。window对象很有意思,window属性是一个自引用的成员。既可以通过window.property访问变量,也可以简单的使用property来访问变量。这是因为javascript具有一个全局对象,同时又具有一个本质上与其相同的window对象。
在浏览器中,每个窗口,iFrame和选项卡都具有自己唯一的全局对象。在某些情况下,可以通过DOM在这些作用域之间进行通信,但在通常情况下这些作用域都是相互独立和隔离的。
实例一
获取全局对象
1 <script type="text/javascript">
2 function getGlobalObject(){
3 return (function(){
4 return this;
5 }).call(null);
6 }
7 var globalobj=getGlobalObject();
8 alert(globalobj);
9 </script>
注意事项:有些全局属性可以被重写,例如undefined
二 Object对象
Object对象是javascript语言中其他对象的基类,通过Object,开发人员可以在运行时实例化用户自定义的对象。
属性列表
方法列表
Object对象:
实例二
合并对象
<script type="text/javascript"> Object.prototype.merge=function(obj){ //确保所处理的是一个有效的对象 if(typeof this=="object" && obj && typeof obj=="object"){ for(var arg in obj){ if(typeof obj[arg]=="object" && !obj[arg].length){ if(!this[arg]){ this[arg]={}; } this[arg].merge(obj[arg]); }else{ this[arg]=this[arg]||obj[arg]; } } } } var person={ name:"unkonwn", age:0, height:"no", weight:"no", occupation:"no", children:{ count:0, names:[] } } var kycool={ name:"keyool", age:25, occupation:"code man" } kycool.merge(person); for(var m in kycool){ document.write(m+":"+kycool[m]+"<br/>"); } </script>
运行结果:
name:keyool age:25 occupation:code man merge:function(obj){ //确保所处理的是一个有效的对象 if(typeof this=="object" && obj && typeof obj=="object"){
for(var arg in obj){ if(typeof obj[arg]=="object" && !obj[arg].length){ if(!this[arg]){ this[arg]={}; }
this[arg].merge(obj[arg]); }else{ this[arg]=this[arg]||obj[arg]; } } } } height:no weight:no children:[object Object]
重写isType系类函数
//=====================isType系列====================// Object.isArray=function(obj){ //检查参数是否是对象,并且其构造函数是数组构造函数 return (typeof obj =="object" && obj.constructor==Array); } Object.isDate=function(obj){ //检查参数是否是对象,并且其构造函数是日期对象的构造函数 return (typeof obj =="object" && obj.constructor==Date); } Object.isNumberObject=function(obj){ //检查参数是否是对象,并且其构造函数是Number对象的构造函数 return (typeof obj=="object" && obj.constructor==Number); } Object.isStringObject=function(obj){ //检查参数是否是对象,并且其构造函数是String对象的构造函数 return (typeof obj=="object" && obj.constructor==String); } Object.isBooleanObject=function(obj){ //检查参数是否是对象,并且其构造函数是Boolean对象的构造函数 return (typeof obj=="object" && obj.constructor==Boolean); } Object.isFunction=function(obj){ //检查参数是否是函数对象 return (typeof obj=="function"); } Object.isObject=function(obj){ //检查参数是否是对象 return ((typeof obj=="object" && !!obj)||(typeof obj=="function")); } Object.isRegex=function(obj){ //检查参数是否是RegExp对象 return (typeof obj=="object" && obj.constructor==RegExp); } Object.isString=function(obj){ //检查参数是否是字符串 return (typeof obj=="string"); } Object.isNumber=function(obj){ //检查参数是否是数值 return (typeof obj=="number" && isFinite(obj)); } Object.isBoolean=function(obj){ //检查参数是否是布尔型 return (typeof obj=="boolean"); } Object.isUndefined=function(obj){ //检查参数是否是undefined return (typeof obj=="undefined"); } Object.isNull=function(obj){ //检查参数是否是null return (typeof obj=="object" && !obj); }