对于今天的标准来说,任何一个符合规范的web页面都应该包含以下三个要素:内容(HTML),外观(CSS)和行为(javascript)。
通常来说,javascript程序的运行必须依赖于某种宿主环境,其中最常见的便是web浏览器了,但这也不是绝对的,浏览器并不是javascript大妈唯一的宿主环境。事实上,我们可以利用Java是riot来创建各种类型的插件工具,应用扩展以及其他形式的组件。
早期的web站点只不过是一个由html组成的静态文档集,这些文档只是有一些简单的超链接绑定在一起。但随着web业务的快速增长,人们对于他的期望也越来越多,希望自己的web页面可以处理更多的事情,拥有更为丰富的用户交互能力,以便完成一些简单的任务,加强与服务器端的信息交互。在那个洪荒年代,他们有两种选择:JAVA applets(很不幸的是这失败了)和LiveScript(是1995年出生的,有Netscape公司开发的程序设计语言,在Netscape2.0之后,它就改名为我们所熟知的JavaScript了.)。
后面,这种对web也面中静态元素进行扩转的方式就在业界大放异彩,其他浏览器厂商也纷纷开始效仿并推出自己的类似的产品,可以说那是一个大浏览器时代!!!!但随之而来的就是各家厂商的标准出现,使得没有一个标准化的东西,这使得当时的前辈们在跨浏览器开发上十分的头疼。终于在经过一段时间争斗后,为了使语言的实现更趋向于标准化,一个叫ECMAScript(欧洲计算机制造商协会)便应运而生了。这才有了我们所熟知的ECMA-262的标准文档。当今业界广为流传的JavaScript也只是遵守该标准的一种实现而已。
面向对象程序设计(oop)中最常用到的概念:1,对象 方法 属性 2,类 3,封装 4,聚合5,重用 6,多态
对象 所谓的对象,实质上是指事物在程序设计语言中的表现形式。譬如一只猫星人这种常见的高冷的大佬,我们就可以看到它们具有某些明确的特征(如大小,颜色,名字等),能执行某些动作(比如爬行,喵喵叫,睡觉等)。在OOP语义中,这些对象的特征就叫做属性,而那些动作就叫做方法。此外,也有一些口语方面的类比:对象一般是用名词(如:book,person)方法一般是动词(如:read,run,sleep)属性一般是一些形容词
类 在现实生活中,类似的对象往往都有一些共同的组成特征。而在OOP中,类实际上就对象的设计蓝图后者制作配方。我们能基于相同的类创建出许多不同的对象。因为了更多的是一种模板,而兑现就是在这些木板的基础上呗创建出来的。但实际上,,在传统的面向对象的语言中我们是这样描述的:“我基于Person类创建了一个叫做Bob的鑫对象”。而在基于原型的面向对象语言中,我们则会这样描述:“我将现有的Peron对象扩转诚意个叫做Bob的新对象。”
封装 是另一个OOP相关的概念,它主要用于阐述对象中所包含(或封装)的内容,他们通常有两部分组成:1.相关的数据(用于存储属性)2.基于这些数据所能做的事情(所能调用的方法)。对于其中的偶操作对象的接口,我们只需要知道他的功能与起到的作用,而不必去关心他的具体实现。而另一方面,javascript作为一个public语言,它还是提供了private,protected,pubilc这些关键字来限定访问的层次。这样便提供了一些一些隐藏数据的方法,以保护程序的隐秘性。
聚合 有时候也叫作组合,实际上是指我们将几个现有的对象合并成一个新对象的过程。通过聚合这种强有力的方法,我们可以将一个问题分解成多个更小的问题,这样,我们就可以考虑将它分解成若干个子问题区,并且必要的的话,这些问题区还可以分解成更小的分区。这样做有利与我们从几个不同抽象层次来考虑问题。列如一个Book对象,便是由author对象,publisher对象,若干个chapter对象以及一组table对象聚合而成的对象。
继承 通过继承,我们可以很优雅的实现对现有代码的重用。例如,我们有一个叫做P的一般性对象,其中包含一些名字之类的属性,以及一些功能性函数,如步行,睡觉等。然后,当我们发现自己需要一个pa对象是,当然,这时候你可以将p对象中所有的多项与属性重新实现一遍,但除此之外哎呦一种更聪明的做法,机我们课与让pa继承自p,这样就省去我们不少工作。因为pa对象只需要时间属于他自己的那部分特殊功能,而其余部分秩序重用p的实现即可。在传统的OOP中,继承通常值得是类与类之间的关系,但由于javascript不存在类,英雌继承只能发生在对象之间。当一个对象继承自另一个对象,通常会往其中加入新的方法,以扩展被继承的老对象。另外对于新对象来说,他也可以根据自己的需求,从继承而来那句方法中惦几个来重新定义。名字并不会改变,这样至少该方法的行为和之前不同了。这种方法叫做覆写。
多态 不同对象通过相同的方法调用来实现各自行为的能力,我们称之为多态。