您的位置:首页 > 移动开发 > Objective-C

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

2011-12-21 15:19 686 查看
  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在这些作用域之间进行通信,但在通常情况下这些作用域都是相互独立和隔离的。

实例一

获取全局对象

<script type="text/javascript">
function getGlobalObject(){
return (function(){
return this;
}).call(null);
}
var globalobj=getGlobalObject();
alert(globalobj);
</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对象:

当在完全可控的环境中开发javascript时,使用原型继承扩展javascript基类是一种安全的实践

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: