【javascript笔记】全局对象和Object对象

  javascript中的全局对象,全局对象是一个父级的构造,所有的其他的对象,变量和函数都属于全局对象。还有一种是Object对象,javascript中的其他对象都是从Object继承而来,包括内置对象。

一全局对象

1 全局对象的特性

  • 全局对象只是一个对象,而不是类。既没有构造函数,也无法实例化一个新的全局对象。
  • 全局对象不是任何对象的属性,所以它没有名称。
  • 全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性的占位符。
  • 在顶层 JavaScript 代码中,可以用关键字 this 引用全局对象。
  • 全局对象是作用域链的头,意味着在顶层 JavaScript 中声明的所有变量都将成为全局对象的属性。
  • 通常不必用 this 引用全局对象,因为所有非限定性的变量和函数名都会作为全局对象的属性来查询。
  • 通过使用全局对象,可以访问所有其他预定义的对象、函数和属性。
  • 全局对象的预定义属性都是可枚举的,所以可以用 for/in 循环列出所有隐式或显式声明的全局变量

  全局对象是顶层的上下文环境,其他所有对象都属于全局对象。在web开发中,全局对象为作用域提供了最顶层的上下文环境,并为web开发所依赖的某些高层浏览器功能提供了共享的平台。除此之外,全局对象还包括以下内容:

  • javascript中所有内置的对象
  • javascript中常用的内置属性
  • javascript中某些内置函数
  • 某些特定的浏览器对象,例如document和window对象

  对于作用域,全局对象也提供了非常有用的功能。当引用一个变量时,在当前作用域中并未找到该变量时,解释器就会沿着作用域链向上移动,并沿着作用域链查找该变量,直到查到全局对象。如果始终无法找到该变量,解释器会认为该变量不存在,并触发一个异常,当在全局作用域中时,可以使用关键字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.constructor
  • Object.prototype
  • Obect._parent_
  • Object._proto_

  方法列表

  • Object.eval()
  • Object.hasOwnProperty()
  • Object.isPrototypeOf()
  • Object.propertyIsEnumerable()
  • Object.toLocaleString()
  • Object.toSource()
  • Object.toString()
  • Object.unwatch()
  • Object.valueOf()
  • Object.watch()
  • Object._defineGetter_0
  • Object._defineSetter_0
  • Object._lookupGetter_0
  • Object._lookupSetter_0
  • Object._noSuchMethod_0

Object对象:

  1. 当在完全可控的环境中开发javascript时,使用原型继承扩展javascript基类是一种安全的实践
  2. valueOf()方法和toString()方法  区别:valueOf()方法返回一个对象的基本值,而toString()方法则用于返回对象中最用用的文本值。

实例二

合并对象

<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);
}

 

 

转载于:https://www.cnblogs.com/kycool/archive/2011/12/21/2291773.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值