【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在这些作用域之间进行通信,但在通常情况下这些作用域都是相互独立和隔离的。
实例一
获取全局对象
注意事项:有些全局属性可以被重写,例如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()方法则用于返回对象中最用用的文本值。
实例二
合并对象
运行结果:
重写isType系类函数
一全局对象
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); }
相关文章推荐
- javascript对象---5 Object全局内置函数
- JavaScript笔记03——文档对象模型(Document Object Model,简称DOM):获取HTML元素、操作HTML元素
- JavaScript高级程序设计之BOM之window 对象之全局作用域 第8.1.1讲笔记
- JavaScript复习笔记:Object(对象)
- JavaScript学习笔记2-五种原始数据类型和Object对象类型
- Javascript高级程序设计第二版第六章--面向对象程序设计(Object-Oriented Programming)简称OOP编程--笔记
- Javascript学习笔记--Object对象
- [Effective JavaScript 笔记] 第8条:尽量少用全局对象
- Javascript高级程序设计第二版第六章--面向对象程序设计(Object-Oriented Programming)简称OOP编程--笔记
- Javascript学习笔记(Object 对象与继承)
- JSON-JavaScript对象表示法--学习笔记
- JavaScript学习笔记(七)----面向对象的程序设计
- JavaScript学习笔记(二) js对象
- es6 javascript对象方法Object.assign()
- 【javascript笔记】Promise对象
- JavaScript 中的对象深度复制(Object Deep Clone)
- [Effective JavaScript 笔记]第55条:接收关键字参数的选项对象
- JavaScript基础(基本语法:变量、语句、数组、函数、对象、全局方法以及js与java不同,js与html关联)
- JavaScript学习笔记二十三:浏览器对象
- javascript笔记(JavaScript_Core电子书)-函数对象