犀牛书学习笔记(5):javascript中的对象

前面一篇咱们回顾了面向对象概念和JAVA的对象核心概念,但实际上,JAVA是一种基于类继承的面向对象语言,而javascript是基于原型的面向对象语言,咱们就不纠结于基于类和基于原型的优劣,也无论它们的设计原理,咱们只从使用的角度进行理解和说明。有些文章建议彻底抛弃JAVA这种基于类面向对象,清空大脑,再去学习javascript这种基于原型的面向对象设计,但这是不可能的。这里有篇文章对此进行了阐述:http://www.ibm.com/developerworks/cn/web/1304_zengyz_jsoo/,你们能够去参考。javascript

javascript有三类对象类型:本地对象、内置对象和宿主对象。java

本地对象web

独立于宿主环境的ECMAScript实现提供的对象。其实就是ECMAScript中定义的类,包括有:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、RefereneError、SyntaxError、TypeError、URIError。浏览器

很敏感的,我看到了Object类,那么是否是其余的类都是继承自Object?没有答案,谁知道能够告诉我。咱们只须要知道这些是预先定义好的类,能够直接实例化使用。具体使用方法请参考相关API文档。服务器

内置对象函数

由ECMAScript实现提供,独立于宿主环境的全部对象,在ECMAScript执行时出现。只有两个对象Global和Math。根据定义,内置对象是本地对象。Math比较容易理解,你就当作本地对象同样使用便可,并且不用实例化,觉得已经实例化了。重点讲讲Glaobal对象(全局对象)。学习

Global对象很是特殊,其实根本不存在,由于你没法使用它,那么它起什么做用呢?this

它是做为 JavaScript 的全局函数和全局属性的占位符而存在,经过使用全局对象,能够访问全部其余全部预约义的对象、函数和属性。全局对象不是任何对象的属性,因此它没有名称。spa

在顶层 JavaScript 代码中,能够用关键字 this 引用全局对象。但一般没必要用这种方式引用全局对象,由于全局对象是做用域链的头,这意味着全部非限定性的变量和函数名都会做为该对象的属性来查询。例如,当JavaScript 代码引用 parseInt() 函数时,它引用的是全局对象的 parseInt 属性。全局对象是做用域链的头,还意味着在顶层 JavaScript 代码中声明的全部变量都将成为全局对象的属性。全局对象只是一个对象,而不是类。既没有构造函数,也没法实例化一个新的全局对象。设计

简单的比喻能够概要性理解全局对象:在JAVASCRIPT中没有人(对象)要的属性啊、方法啊,能够简单理解为都是去全局对象的,没人要的,都是个人,呵呵。这样能够保证一种语言的一致性:ECMAScript中,不存在独立的函数,全部函数都必须是某个对象的方法。这样是否是保证了面向对象的纯洁性?也许由于此,javascript才可以被称为是面向对象的语言,起码表面上看起来是这样。

宿主对象

所非本地的对象都是宿主对象,由ECMACript实现的宿主环境提供的对象。说了半天,什么是宿主环境?宿主环境简单说就是javascript寄存的宿主的环境,如浏览器环境、服务器环境。基于此概念,咱们本身定义的对象,应该就是在某个宿主环境的对象。

全部本地对象都继承自Object对象,内置对象也是本地对象,所以和JAVA同样,Object对象是根对象。

本地对象和内置对象构成了语言体系:Object、Function分别对应对象和函数概念,Array、String、Boolean、Number对应基本的数据类型,Date是时间日期,RegExp是正则对象,其余是对语言内部错误进行分类的错误对象:Error、EvalError、RangeError、RefereneError、SyntaxError、TypeError、URIError,Golbal更是重要的语言必须的对象,Math用于复杂的数学计算,为何归入核心语言,尚需研究。

相关文章
相关标签/搜索