JavaScript是一门基于Web的语言。它最初是作为在网页中操作一些特定类型元素(例如图像和表格字段)的方法,现在该语言的发展已经远远超出了预期。除了作为客户端浏览器所使用的脚本,现在JavaScript还可以用于正在增加的更加多样化的平台编程。例如可以用于编写服务端代码(.net或node.js)、应用程序的扩展(Firefox和Photoshop编写扩展)、移动应用程序和命令行脚本。

JavaScript也是一门与众不同的语言。它没有类,并且函数是用于很多任务的顶层类对象。最初很多程序员认为该语言效率低下,但近年来该观念有所改变。有趣的是,例如Java和PHP这类语言开始增加闭包和匿名函数特性,而JavaScript程序员早就已经享用了这些特性。

JavaScript是一门动态性较强的语言,通过配置可以使其看上去和感觉起来像您过去习惯的其他语言一样。但接受JavaScript与其他语言的不同,并学习其特定的模式可能是更好的方法。

什么是模式(Pattern)

维基百科解释为: 在物体或事件上,产生的一种规律变化与自我重复的样式与过程。在模式之中,某些固定的元素不断以可预测的方式周期性重现。最基本而常见的模式,称为密铺,具备重复性以及周期性两大特征。找寻出固定模式是人类基本的认知功能之一。

在软件开发中,模式是指一个通用问题的解决方案。一个模式不仅仅是一个可以用来复制粘贴的代码解决方案,更多地提供了一个更好的实践经验、有用的抽象化表示和解决一类问题的模板。

学习模式的理由

1. 通过学习模式,可以帮助我们使用经过实践证明有效的经验来编写代码,而无需做很多无用工作。

2. 模式提供了某种程度上的抽象。我们的大脑在一定时间内仅仅能记住一定数量的内容,因此在思考更复杂的问题时,使用模式可以让您集中经理去用已有模式来解决该问题,而不需要被一些低层次的细节所困扰。

3. 模式可以改善开发者和开发团队之间的交流。

JavaScript基本概念 · 面向对象

JavaScript是一门面向对象的语言,任何一段Javascript代码都很有可能是一个对象。只有五中基本类型不是对象:数值类型(Number)、字符串类型(String)、布尔类型(Boolean)、空类型(null)和未定义类型(undefined)。其中前三个类型有对应的以基本类型封装形式体现的对象表示。数值类型、字符串类型和布尔类型的值可以通过程序员或者位于幕后的JavaScript解释器来实现向对象的转换。

函数(Function)实际上也是对象,函数有属性和方法。

在任何一门程序语言中最简单的事情就是定义一个变量。在JavaScript中,一旦定义好一个变量,同时也就已经正在处理对象了。首先,该变量会自动成为内置对象的一个属性,成为激活对象(如果该变量是一个全局变量,那该变量会成为全局对象的一个属性)。

var a = 1;
console.log(window.a);      // return => 1
console.log(window["a"]);   // return => 1

该变量实际上也是伪类,因为它拥有其自身的属性(attributes),该属性决定了该变量是否可以被修改、被删除和在一个for in循环中进行枚举。这些属性在EMCAScript 3中没有直接对外提供,但在第5版本中,提供了一个特殊描述符方法来操作这些属性。

那么对象是什么东西呢?因为他们需要做很多事情,所以这些对象必须十分特殊。实际上对象十分简单的。一个对象仅仅是一个容器,该容器包含了命名的属性、键-值对(大多数)的列表。这里面的属性可以是函数(函数对象),这种情形下我们称其为方法(Function)。

关于创建的对象的另外一件事情是可以在任意时间修改此对象(ECMAScript 5引入了API来防止突变)。可以对一个对象执行添加、删除和更新它的成员变量。如果关注隐私和访问,在模式方面也有对应的内容。

对象主要有两种类型:

原生的(Native)、主机的(Host)

原生对象可以进一步分为内置对象(例如数组、日期对象等)和用户自定义对象(例如 var P={x: 0, y: 5};)等。

主机对象包含windows对象和所有的DOM对象。如果还不确定使用的是否是主机对象,可以尝试在不同的、无浏览器的环境下运行该代码,如果该代码能正确的运行,那么应该使用的是原声的对象。

JavaScript基本概念 · 没有类

在JavaScript中没有类。不使用类的做法可以使得编程更为简洁。在创建一个对象的时候,无需先拥有一个类。这对于其他编程语言是不同的。

对于其他编程语言,创建对象的方式(C#):

public class P{private int x;private int y;public P(int x, int y){this.x = x;this.y = y;  }
}P pointA = new P(1, 2);

而JavaScript:

var pointA = { x: 1, y: 2};

这样在需要创建一个简单对象的时候,往往JavaScript更为简单,我们亦希望让对象更为简洁。

在JavaScript中,可以在需要的时候创建一个空对象,然后开始为该对象添加感兴趣的成员变量。可以为该对象添加基本类型、函数和其他对象来作为该对象的属性。一个“空对象”实际上并不是完全空白的,他实际上包含了一些内置的属性,但没有其自身的属性。

“尽量多使用对象的组合,而不是使用类的继承”。这句话的意思是通过已有的对象组合来获取新对象,是比通过很长时间的父-子继承链来创建新的对象更好的一种方法。在JavaScript中可以很简单地实践该建议,之所以这么简单是因为在JavaScript中没有类,因此使用对象组合是唯一可以采取的方法。

JavaScript基本概念 · 原型(Prototypes)

JavaScript没有继承,尽管这是重用代码的一种方式。但JavaScript可以使用多种方法实现继承,这里通常使用原型。原型是一个对象,并且创建的每一个对象都会自动获取一个Prototypes属性,该属性指向一个新的空对象。该对象几乎等同于采用对象字面量或Object()创建的对象,区别在于它的构造器(constructor,该属性返回对创建此对象的数组函数的引用)属性指向了所创建的函数,而不是指向内置的Object()函数。可以为该空对象增加成员变量,以后其他对象也可以从该对象继承并像使用自己的属性一样使用该对象的属性。

var P = function (x, y) { this.x = x; this.y = y; }
console.log(P.prototype);  // Object {}
console.log(P.constructor);  // function Function() { [native code] }
var p = new P(1, 2);
console.log(p.constructor);  // function (x, y) { this.x = x; this.y = y; }
console.log(p.constructor.prototype === P.prototype);  // true

原型就是一个对象(不是一个类,也不是其他特殊的元素),每一个函数都有Prototype属性。

JavaScript基本概念 · 环境

JavaScript需要运行环境来执行。通常JavaScript是在浏览器中执行的,但是这不是唯一的运行环境。本书中介绍的模式大部分是和核心JavaScript(ECMAScript)相关的。因此它们是与环境无关的。除了以下两种情况以外:

1. 特定针对浏览器的模式。

2. 其他示范模式的实际应用程序范例。

环境会提供自身的主机对象(例如window对象),该对象在ECMAScript标准中没有定义,可能会带来没有特别提到的和不确定的行为。

JavaScript基本概念 · EMCAScript 5

核心的JavaScript编程语言(不包含DOM、BOM和额外的主机对象)是基于EMCAScript标准(缩写为ES)。该标准的第三版是在1999年被官方所接受,并且是当前浏览器所使用的标准。该标准的第四版被放弃了,第五版在2009年12月得到通过,这相比第3版过去了10年。

目前支持ECMAScript 5浏览器

浏览器 IE Firefox Chrome Safari Opera

IOS

Safari

Opera

Mini

Android

Browser

Blackberry

Browser

IE Mobile
版本 10 - 11 22 - 25 28 - 31 6 - 7 16 - 17 5 - 7 不支持 3.0 - 4.2 7 - 10 10

此表统计于2013年9月

第5版ECMAScript增加了一些新的内置对象、方法和属性,但最重要的是增加了所谓的strict(严格)模式,该模式实际上可以从JavaScript语言中移除某些特性,使得程序更为简洁和不容易出错。例如with语句的语法在这几年中有很多争议。现在在ES5的strict模式中将会引发错误,尽管在非strict模式中能正常运行。strict模式是通过一个普通字符串来触发的,在该语言的较早的实现方式中将会忽略掉该代码。这意味着通过使用strict模式,可以实现向后兼容性,因为在之前不能理解该代码的浏览器中,它不会引起错误。

在一个作用域(可以是函数作用域、全局作用域或者在将字符串的起始位置传递给eval()中),也可以使用如下字符串:

function My(){"use strict";//...以下放置函数的其余部分
}

这就意味着函数中的代码是在ECMAScript语言的strict子集中运行。对于之前的浏览器,这仅仅是一个字符串,并没有分配给任何变量,因此不会被使用,进而不会导致错误。

在本语言的未来计划中,将只允许使用strict模式。考虑到ES5是一个过渡版本,本语言现在鼓励开发者使用strict模式编写代码,但不强制要求。

转载于:https://www.cnblogs.com/raindream/p/3345587.html

Javascript模式阅读笔记 · 简介相关推荐

  1. JavaScript模式读书笔记 第3章 字面量和构造函数

    1,对象字面量     -1,Javascript中所创建的自定义对象在任务时候都是可变的.可以从一个空对象开始,根据需要增加函数.对象字面量模式可以使我们在创建对象的时候向其添加函数.       ...

  2. 软件需求模式阅读笔记三

    阅读的章节是基础需求模式和信息模式.从现在开始,到了本书的重点,介绍了多种需求模式. 基础需求模式:其中包括系统间接口需求模式,系统间交互需求模式,技术需求模式,遵从标准需求模式,参考需求需求模式和文 ...

  3. JavaScript百炼成仙阅读笔记

    第一章 JavaScript基础 原生数据类型5种:数字.字符串.布尔值.null.undefined 对象数据类型var x={}创建,接下来是一些对属性的操作(书上有) typeof() cons ...

  4. JavaScript模式读书笔记 第5章 对象创建模式

    1,命名空间模式  namespace   <script> var myApp = {};//通过全局变量来实现命名空间 maApp.Parent = function (){   }; ...

  5. 有效用例模式阅读笔记三

    第五章 用例 5.1 CompelteSingleGole 不适当的目标,会使编写人员不能确定什么时候一个用例结束,什么时候另一个用例开始. 原因: 太大的用例可能会因细节过多占去涉众的大部分精力: ...

  6. 《JavaScript模式》读书笔记一:基本技巧

    <JavaScript模式>的读书笔记,个人向! 更新进度随我的阅读进度 基本技巧 尽量少用全局变量 防止变量污染 注意JS变量提升问题 尽量使用单一var模式,只使用一个var在函数顶部 ...

  7. 【JavaScript】MDN 阅读笔记

    MDN 阅读笔记 从大一到现在,一直在重度使用 JavaScript 相关的技术栈,却一直也没写过系统的笔记.主要是太熟悉,也因为 JavaScript 确实是一门不需要学习就能直接上手开发的语言. ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. AD9910高速集成DDS芯片(芯片阅读笔记-串行模式篇-22个寄存器SPI通信周期控制)

    文章目录 引言 串行编程 利用官方软件得到寄存器值 福利连接 引言 本文为AD9910的芯片阅读笔记,本文并不是对芯片手册的纯粹照搬,所以建议结合芯片手册阅读.通过对AD9910芯片手册的理解,然后再 ...

最新文章

  1. PHP中不被注意但是比较重要的函数用法集合
  2. FoundationDB Record Layer 宣布开源,提供关系数据库功能
  3. Perfect service(树形dp)
  4. java中capitals,Java GlobalConfiguration.isCapitalMode方法代码示例
  5. java try catch_Java捕获异常
  6. ASP.NET 2.0+Atlas编写鼠标拖放程序
  7. 【python】-- Socket接收大数据
  8. windows编程 识别拖动_Quicker 解锁新姿势!Windows 还能这么用?
  9. 1024乘风破浪季,3本好书助你平步青云
  10. 网络人工智能研究方向有哪些?
  11. 三菱PLC(FX5U)与C#通信说明
  12. 空调基础知识培训课件
  13. monitor.bat无法启动解决办法
  14. 蒟蒻的WA之路——二分法学习
  15. Linux基础篇(五):远程操作
  16. Android 之 日期时间 时区同步
  17. python精选04集(选择语句)
  18. 【软件工程习题(含参考答案)】总复习
  19. 轻量级pythonide_《轻》字意思读音、组词解释及笔画数 - 新华字典 - 911查询
  20. 为什么Markdown+R有较大概率成为科技写作主流? ← 阳志平的个人网站::技术

热门文章

  1. C#显示百度地图API
  2. 2016 湖南省省赛B题《有向无环图》
  3. Shell脚本中的交互式命令处理
  4. Java论坛系统 JForum
  5. SharePoint的WebService的应用
  6. Java输出数组中最长递增子序列的代码
  7. C二维数组行为空,列不为空
  8. vue-cli中配置sass
  9. 使用Hibernate操作数据库
  10. 堆排序\链表实现局部排序