本节书摘来自异步社区《JavaScript面向对象编程指南》一书中的第1章,第1.1节,作者: 【加】Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区“异步社区”公众号查看。

第1章 引言

众所周知,时下所流行的这些Web应用,例如Yahoo! Maps、Google Maps、Yahoo! Mail、My Yahoo!、Gmail、Digg以及YouTube等都有一些明显的共同特征,即:它们都是Web2.0时代的应用程序,都有非常丰富的人性化交互界面,而这往往意味着大量的JavaScript应用。事实上,JavaScript最初也只不过是一种内嵌于HTML语句中的单行式脚本语言。但如今已经今非昔比了,对于它今天所拥有的面向对象特性来说,无论是在可重用性方面,还是在可扩展性方面都已经足以支持我们去实现任何网站项目中的行为逻辑了。毕竟,对于今天的标准来说,任何一个符合规范的Web页面都应该包含以下三个要素:内容(HTML)、外观(CSS)和行为(JavaScript)。

通常来说,JavaScript程序的运行必须要依赖于某个宿主环境。其中最常见的当然就是我们的Web浏览器了,但请注意,浏览器并不是JavaScript代码唯一的宿主环境。事实上,我们可以利用JavaScript来创建各种类型的插件工具、应用扩展以及其他形式的组件。总之,学习JavaScript语言是一件一举多得的事情,我们可以通过学习这种语言,来编写各种不同的应用程序。

这本书将着重于介绍JavaScript语言本身,特别是其中的面向对象特性。我们会从零开始讲解这些内容,也就是说,读这本书无需具备任何的程序设计基础。另外,除了有一章内容是专门为Web浏览器环境而写的以外,本书其余部分介绍的都是JavaScript的一般特性,适用于任何支持该语言的执行环境。

现在,让我们进入第1章的学习吧。首先,我们需要先来了解一下JavaScript背后的发展历程,而后我们才能逐步引入面向对象编程方面的基本概念。

1.1 回顾历史

起初,Web站点事实上只不过是一个静态的HTML文档集,这些文档之间仅依靠一些简单的超链接(hyperlinks)绑定在一起。但很快,随着Web业务的快速普及和增长,网站管理者越来越希望自己所创建的Web页面能处理更多的事情。例如,他们希望网站具有更丰富的用户交互能力,以便能完成一些简单的任务(比如验证表单之类),加强与服务器端的信息交互。那时候,他们有两种选择:Java applets(后来被证明失败了)和LiveScript。其中,LiveScript就是1995年由Netscape公司开发的程序设计语言。Netscape 2.0之后,它正式被更名为JavaScript。

不久,这种对Web 页面中静态元素进行扩展的方式就在业界大放异彩,令其他的浏览器厂商也纷纷效仿,推出了自己的类似产品。例如,Microsoft公司随后就发布了支持JScript的Internet Explorer(IE)3.0。该语言在JavaScript的基础上引入了一些IE独有的特性。最终,为了使语言的实现更趋向于标准化,一个叫做ECMAScript(欧洲计算机制造商协会)的组织应运而生了。这才有了我们今天所看到的这份被叫做ECMA-262的标准文档。目前在业界广为流行的JavaScript也只是遵守该标准的一种实现而已。

无论结果是好是坏,JavaScript在随后爆发的第一次浏览器大战(大约是在1996年到2001年间)中得到了迅速的普及。那时正值互联网发展的第一波繁荣期,主要由Netscape和Microsoft这两大浏览器厂商在争夺市场份额。在此过程中,他们不断地往各自的浏览器中添加新的特性和各种版本的JavaScript实现。但他们彼此之间又缺乏共同遵守的标准,这给JavaScript的开发带来大量的负面影响,也给开发人员带来巨大的痛苦。因为在这种情况下,我们通常只能针对某一个具体的浏览器来编写脚本。如果我们把在这个浏览器上开发的脚本拿到其他浏览器上测试,就会发现它们完全不能工作。与此同时,由于浏览器厂商都在忙于继续增加新的浏览器特性,以至于根本没能及时更新相应的工具,这导致了开发工具的严重滞后。

尽管浏览器厂商引入的不兼容性使Web开发人员感到难以忍受,但这还只是问题的一个方面。而另一方面的问题则出在开发人员自己身上,他们在自己的Web页面中使用了太多的新特性,总是迫不及待地想引入浏览器提供的每一项新功能,以“加强”自己的页面。例如状态栏中的动画、闪烁的颜色、闪烁的文本、会摇晃的浏览器窗口、屏幕上的雪花效果、能跟踪对象的鼠标光标等,而这往往都是以牺牲实用性为代价的。这种滥用现象极大地损坏了JavaScript在业界的名声,以至于那些“真正的程序员”(这里特指那些具有更成熟的编程语言背景的开发人员,例如Java或C/C++程序员)对JavaScript根本不屑一顾,或者仅仅把它当做一种用于前端设计的玩具。

出于上述原因,JavaScript语言在一些Web项目中遭到了强烈抵制。某些项目甚至完全拒绝在客户端上进行任何的程序设计,转而只信任他们自己可以掌控的服务器端。确实,在当时的情况下,也没有什么理由值得我们花费双倍的时间来为这些不同的浏览器设计项目,然后再花更多的时间去调试它们。

《JavaScript面向对象编程指南》——第1章 引言1.1 回顾历史相关推荐

  1. 《JavaScript面向对象编程指南》——1.3 分析现状

    本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.3节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...

  2. 《javascript面向对象编程指南》读书笔记

    <javascript面向对象编程指南>读书笔记 <javascript面向对象编程指南>读书笔记 第一章 面向对象的JavaScript 第二章 基本数据类型与流程控制 变量 ...

  3. 《JavaScript面向对象编程指南》——1.7 训练环境设置

    本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.7节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...

  4. 《JavaScript面向对象编程指南》—第128页错误指正

    最近在阅读<JavaScript面向对象编程指南第2版>,感觉很有帮助.今晚发现一个小错误,想指正一下. 如图,书中第128页: 书中的第三个例子代码如下: "potato&qu ...

  5. Javascript面向对象编程指南笔记 - 第三章 - 函数

    第三章 函数 第三章 函数 3-1 什么是函数 3-1-1 调用函数 3-1-2 参数 3-2 预定义函数 3-2-1 parseInt 3-2-2 parseFloat 3-2-3 isNaN 3- ...

  6. JavaScript面向对象编程指南(五) 原型

    第5章 原型 5.1 原型属性 function f(a,b){return a*b;};// length 属性f.length; //2// constructor 构造属性f.construct ...

  7. 「JavaScript面向对象编程指南」原型

    在 JS 中,函数本身也是一个包含了方法(如apply和call)和属性(如length和constructor)的对象,而prototype也是函数对象的一个属性 function f(){} f. ...

  8. 《Python面向对象编程指南》——1.2 基类中的__init__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  9. 《JavaScript机器人编程指南》——1.7 小结

    本节书摘来异步社区<JavaScript机器人编程指南>一书中的第1章,第1.7节,作者:[美]Kassandra Perch(珀芝),更多章节内容可以访问云栖社区"异步社区&q ...

最新文章

  1. ssm框架实现学生成绩管理系统
  2. list删除某个元素_Python基础入门之列表(list)
  3. pandas把dataframe的数据列转化为索引列实战:单列转化为索引、多列转化为复合索引
  4. Linq to SQL学习
  5. HBase的环境配置及其应用
  6. ubuntu怎么安装python3操作系统32_ubuntu系统下安装python3
  7. sqlserver的存储过程mysql_mysql,sqlserver存储过程的创建及执行
  8. I/O多路复用之select
  9. 在线表单收集系统Tduck(docker篇)
  10. python调用swmm程序_Python SWMM5包_程序模块 - PyPI - Python中文网
  11. 人脸数据库汇总 (来自网络)
  12. 梯度提升决策树GBDT
  13. 高仙商用清洁机器人落地北京环球影城,为室外清洁再添助力
  14. 什么是贪婪型人格?如何改变贪婪的性格?
  15. 各省省际对外非金融类直接投资流量情况(2009-2018年)
  16. Centos7配置网络
  17. Bug:数据库的有数据,但是查出来是0
  18. chatgpt中的强化学习 PPO
  19. Unity流水账8:MeshComponents
  20. 中国计算机技术职业资格网(软考)2021,2021上半年全国软考准考证打印入口:中国计算机技术职业资格网...

热门文章

  1. Citrix Reciever更改https为http模式
  2. poj-1159 Palindrome **
  3. 深入学习Heritrix---解析CrawlController
  4. php 防止按住f5不松,WordPress如何防御(频繁F5刷新)的解决方法
  5. hmr webpack 不编译_一文搞懂 webpack HMR 原理
  6. 企业进销存管理系统_攻略 | 七巧Plus定制您的专属进销存管理系统
  7. Java写文件的缓冲区有多大_java – 将FileChannel#write总是写入整个缓冲区...
  8. redis序列化_实例讲解Springboot以Template方式整合Redis及序列化问题
  9. c java 开发android_java代码与纯C代码混编完成android应用的开发
  10. 横河压力变送器选型_压力变送器的原理和选型技巧