《JavaScript专家编程》——第1章 对象和原型 1.1鸟瞰JavaScript

本节书摘来自异步社区《JavaScript专家编程》一书中的第1章,第1.1节,作者:【美】Mark Daggett(达格特)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

第1章 对象和原型

练习不会造就完美,只有使用最佳的方法来练习才能造就完美。

——Vince Lombardi

对专家来说,把JavaScript的核心概念讲上3章似乎有点多,毕竟这些是语言最基本的组成部分。我的主张是,有的人虽然不能读写,但可以说话。就像有的开发人员对JavaScript的基本功能很熟悉,但对里面那些复杂的东西可能就没那么了解了。

本书的目标是像明灯一样照亮语言中那些晦涩的角落。里面包含的很多概念你可能已经试着学习过了,甚至可以假设你已经理解了。这里可以想象一下:你正降落到你大脑中储存着JavaScript的那一个房间。本书可以被看作是一盏探照灯,用来检查你的JavaScript根基中那些有裂纹的地方。本章和下面的章节是用来弥补你的JavaScript知识漏洞的。不要觉得回顾这些知识没用,这其实是对JavaScript知识结构的重新梳理。

我会先高度概括一下JavaScript的语言目标。但你知道它之前,放平你的肚子,匍匐穿过JavaScript中那些鲜为人知的概念。我会首先详细介绍跟对象和原型相关的重要思想,然后在接下来的章节中介绍函数和闭包,这些都是JavaScript的基础。

1.1 鸟瞰JavaScript

我们所说的JavaScript实际上是ECMAScript语言规范的一个实现。JavaScript若想被看作实现ECMAScript规范的一个有效版本,它必须支持规范中定义的语法和语义。作为ECMAScript的实现,JavaScript必须给程序员提供可使用的多种类型(types)、属性(properties)、值(values)、函数(funtion)和一些保留字(reserved words)。

一旦JavaScript的某个版本已经符合了ECMAScript规范,那么语言设计者就可以自由地对版本进行加强,加入他们认为合适的额外功能和方法。ECMAScript规范中明确说明允许这样的扩展,正如下面读到的:

符合标准的ECMAScript实现,允许提供超出本规范描述的额外类型、值、对象、属性和函数。尤其是本规范中描述的对象,允许提供未在本规范中描述的属性和值。一个合乎ECMAScript规范的实现允许加入没有在规范中描述的程序语法和正则表达式语法。

在ECMAScript中,一些额外的特性可以与核心要素并行存在,但仍然被认为是一种有效的ECMAScript标准的实现,这是ECMAScript标准组织发展的一个标志。ECMAScript对特性的要求比较宽泛,这带来了一些好处但也有弊端。虽然灵活地添加新功能,可以鼓励语言设计者的创新,但也会让开发者处于一个不利的状况:他们会为了支持不同的实现和运行环境而写一些代码(polyfills)1。

ECMAScript的规范会因为各种不同原因(原因太多,不一一列举)不断变化。根本上讲,这些变化是为了使用新的方法来解决老的问题,或者用于支持在巨型计算生态系统中的改进。而不断变化的规范就形成了语言的逐步进化。因此,虽然我要讲的是“核心概念”,它们听起来是不变的,但其实并非如此。本章探讨的概念是那些最基本和重要的,但不要忘记,时刻要准备应对新变化的到来。

脚本设计
正如其名称所示,ECMAScript是脚本语言,使用程序化的方式与主机环境进行交互。无论是浏览器、服务器或单片机,都可以为JavaScript暴露一些可操作的接口。大多数宿主环境仅允许JavaScript去触发那些本来用户就可以操作的功能(虽然用户是手动的)。例如,在浏览器中,用户可以使用鼠标或手指在网页链接上单击,JavaScript则可以用程序的形式完成单击的操作,如下所示:
screenshot

从传统观念上讲,ECMAScript几乎专门被设计成一种工具,用于在浏览器中编写网络脚本。开发人员用它来提升浏览网页时的用户体验。如今,ECMAScript能用于服务器上,就像它被应用到浏览器中一样,这一切归功于V8或TraceMonkey这样的独立引擎。

ECMAScript标准组织预见到开发人员使用JavaScript的传统方式和它目前成长的领域非常不一样。在最近的规范中它聪明地界定了什么是“网络脚本”,同时列举了两个当下比较流行的应用情境。

Web浏览器为ECMAScript在客户端的运行提供了宿主环境,它封装了一系列对象供ECMAScript使用,包括窗口、菜单、弹窗、对话框、文本区域、锚点、多窗口的页面、历史、cookie和输入/输出对象。此外,宿主环境提供了一种方式,将脚本代码附着在事件上,例如焦点的改变,页面和图像的加载、卸载,错误和中断,选择,表单提交和鼠标操作。含有脚本代码的HTML和被显示的页面是一种组合,脚本代码提供用户接口,而显示页面则提供静态或动态的文字和图片。脚本代码用于响应用户交互,也就不必要有个主程序了。

Web服务器为服务端的计算提供了不同的宿主环境,包括代表请求、客户端和文件的对象,还包括锁定以及共享数据的机制。在浏览器和服务端同时使用脚本语言,使得将计算逻辑分布到客户端和服务端的同时能为基于Web的应用提供定制化的用户接口。

每个支持ECMAScript的Web浏览器和服务器,都需要有满足ECMAScript运行的宿主环境。


 在作者写作本书时,最新版本的ECMAScript 6(命名为“Harmony”)已经快要发布了,虽然还没有官方发布,但许多提案修改已经被一些运行时引擎和浏览器支持了。本章会对语言的核心进行详尽说明,其中也包括一些在“Harmony”中刚刚引入的新特性。如果某个特性还没有被大范围支持,我会特别提醒读者注意。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#使用PdfiumViewer展示、打印pdf文档

1:简介PdfiumViewer 是一个 WinForms 控件,它承载一个 PdfRenderer 控件并添加一个工具栏来保存或打印 PDF 文件2:兼容性除了常规的win7 win10 也支持xp win83:对比Spire.Pdf和Adobe PDF ReaderSpire.Pdf收费且免费版只能打印三页的pdfAdobe PDF Reader每台电脑都必…

apache 静态编译和动态编译参考

apache-2.2.22 编译安装笔记 一、静态编译 在使用./configure 编译的时候,即没有使用--enable-mods-shared[module]或者--enable-[module]shared这2个中的一个,那么所有的默认模块为静态。何谓静态? 其实就是编译的时候所有的模块自己编译进h…

jQuery插件ASP.NET应用之AjaxUpload

本次使用AJAXUPLOAD做为上传客户端无刷上传插件&#xff0c;其最新版本为3.9&#xff0c;官方地址&#xff1a;http://valums.com/ajax-upload/ 在页面中引入 jquery.min.1.4.2.js 和 ajaxupload.js Html代码 <script src"Scripts/jquery-1.4.2.min.js" type&quo…

LeetCode之Remove Element

1、题目 Given an array and a value, remove all instances of that value in place and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. The order of elements can be changed. It doesnt matter…

运维前线:一线运维专家的运维方法、技巧与实践导读

前  言为什么要写这本书《运维前线&#xff1a;一线运维专家的运维方法、技巧与实践》&#xff08;以下简称《运维前线》&#xff09;是前线系列的一个子集&#xff0c;前线系列图书的出版理念是邀请多位业界专家&#xff0c;总结所在行业的最新理念或深度实践经验。前线系列…

Avalonia跨平台入门第十一篇之自定义Window

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定;今天趁着周末接着去摸索自定义Window样式,毕竟自带的样式不太让人满意;最终实现的效果如下图:前台Window样式:后台Window代码:咱也基于AvalonS…

开发文档收集

http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/ http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html_single 转载于:https://www.cnblogs.com/happyday56/p/4709045.html

ie8下修改input的type属性报错

摘要&#xff1a; 现在有一个需求如图所示&#xff0c;当用户勾选显示明文复选框时&#xff0c;要以明文显示用户输入的密码&#xff0c;去掉勾选时要变回密文&#xff0c;刚开始想到的就是修改输入框的type来决定显示明文还是密文&#xff0c;使用jQuery的attr来做试验&#x…

LeetCode之Count and Say

1、题目 The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 1 2. 11 3. 21 4. 1211 5. 1112211 is read off as "one 1" or 11.11 is read off as "two 1s" or 21.21 is read off …

《SAP入门经典(第4版•修订版)》——2.5 4种视角相互结合

本节书摘来自异步社区《SAP入门经典&#xff08;第4版•修订版&#xff09;》一书中的第2章&#xff0c;第2.5节&#xff0c;作者&#xff1a;【美】George Anderson著&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 2.5 4种视角相互结合 SAP入门经典&#x…

dotNet Core使用SignalR实现websocket

前言:最近有一个公司项目做一个排队叫号系统&#xff0c;系统功能不复杂&#xff0c;所以后端就我一人&#xff0c;难点在于消息推送到安卓屏上&#xff0c;最近有点时间&#xff0c;把我工作中使用的技术分享出来&#xff01;整个技术架构:前端使用vue uniapp&#xff0c;后端…

JPA和hibernate的关系

实际上&#xff0c;JPA的标准的定制是hibernate作者参与定制的&#xff0c;所以JPA是hibernate的一个总成&#xff0c;可以这么理解转载于:https://www.cnblogs.com/cyh2009/p/4709465.html

nagios监控mysql(check_mysql)及内存使用率(check_mem)

一、监控本地&#xff08;localhost&#xff09;内存1、上传监控脚本 check_mem 到/usr/local/nagios/libexec# chown -R nagios.nagios check_mem # chmod x check_mem2、修改commands配置# vim /usr/local/nagios/etc/objects/commands.cfg define command{command_name …

Android之jni编译报错comparsion between signed and unsigned integer expressions解决办法

1、问题 jni编译报错comparsion between signed and unsigned integer expressions 2、原因 在for循环里面&#xff0c;不能用无符号32整形数据作为判断条件 2、解决办法 先把无符号32整形数据强转为整型数据&#xff0c;然后再去作为条件

《手机测试Robotium实战教程》——导读

本节书摘来自异步社区《手机测试Robotium实战教程》一书中的导读&#xff0c;作者 杨志伟&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 目 录前 言第1章 自动化测试简介 1.1节何为自动化测试1.2节自动化测试和手动测试的对比1.3节移动端自动化测试工具的选…

linux内核的冒险md来源释义# 14raid5非条块读

linux内核的冒险md来源释义&#xff03; 14raid5非条块读转载请注明出处&#xff1a;http://blog.csdn.net/liumangxiong假设是非条块内读。那么就至少涉及到两个条块的读&#xff0c;这就须要分别从这两个条块内读出数据。然后再凑成整个结果返回给上层。接下来我们将看到怎样…

为record类型自定义Equals方法

前言record类型&#xff0c;这是一种新引用类型&#xff0c;而不是类或结构。record与类不同&#xff0c;区别在于record类型使用基于值的相等性。例如&#xff1a;public record DemoRecord(int id);public class DemoClass {public DemoClass(int id){this.id id;}public in…

解决IDEA修改已有项目为maven项目时目录结构被改变的问题

Idea可以在项目根目录上右键选择“添加框架支持”&#xff0c;选择maven&#xff0c;为项目添加Maven支持。 但这样会导致原有项目的目录结构被破坏。 更好的方法是在根目录添加pom.xml文件 在<build>标签内添加 <sourceDirectory>标签&#xff0c;并填入源码根目…

C语言之获取32字节随机数的字符串

1、问题 获取32字节随机数的字符串 2、代码实现 #include <stdio.h> #include <time.h> #include <stdlib.h>#define SIZE 32void get_rand(char *p, int length) { char value[10] "0123456789";srand(time(NULL));for (int i 0; i < leng…

排序——选择排序

选择排序 作者&#xff1a;上品物语 知识点&#xff1a; 原理示意图算法特点复杂度1.1 原理 首先&#xff0c;找到数组中最小的那个元素&#xff0c;其次&#xff0c;将它和数组的第一个元素交换位置&#xff08;如果第一个元素就是最小元素&#xff0c;那么它就和自己交换&…