mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 18:32:22 +00:00
修订文字错误
This commit is contained in:
parent
8d85a96a1e
commit
75b88c3ba5
@ -25,9 +25,9 @@ point.toString() // (2, 3)
|
||||
|
||||
```
|
||||
|
||||
上面代码定义了一个class类,可以看到里面有一个constructor函数,这就是构造函数。而this关键字则代表实例对象。
|
||||
上面代码定义了一个“类”,可以看到里面有一个constructor函数,这就是构造函数。而this关键字则代表实例对象。
|
||||
|
||||
class之间可以通过extends关键字,实现继承。
|
||||
Class之间可以通过extends关键字,实现继承。
|
||||
|
||||
```javascript
|
||||
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
## 含义
|
||||
|
||||
所谓Generator,简单说,就是一个内部状态的遍历器,即每调用一次遍历器,内部状态发生一次改变(可以理解成发生某些事件)。ES6引入了generator函数,作用就是可以完全控制内部状态的变化,依次遍历这些状态。
|
||||
所谓Generator,简单说,就是一个内部状态的遍历器,即每调用一次遍历器,内部状态发生一次改变(可以理解成发生某些事件)。ES6引入Generator函数,作用就是可以完全控制内部状态的变化,依次遍历这些状态。
|
||||
|
||||
generator函数就是普通函数,但是有两个特征。一是,function关键字后面有一个星号;二是,函数体内部使用yield语句,定义遍历器的每个成员,即不同的内部状态(yield语句在英语里的意思就是“产出”)。
|
||||
Generator函数就是普通函数,但是有两个特征。一是,function关键字后面有一个星号;二是,函数体内部使用yield语句,定义遍历器的每个成员,即不同的内部状态(yield语句在英语里的意思就是“产出”)。
|
||||
|
||||
```javascript
|
||||
|
||||
@ -17,9 +17,9 @@ var hw = helloWorldGenerator();
|
||||
|
||||
```
|
||||
|
||||
上面代码定义了一个generator函数helloWorldGenerator,它的遍历器有两个成员“hello”和“world”。调用这个函数,就会得到遍历器。
|
||||
上面代码定义了一个Generator函数helloWorldGenerator,它的遍历器有两个成员“hello”和“world”。调用这个函数,就会得到遍历器。
|
||||
|
||||
当调用generator函数的时候,该函数并不执行,而是返回一个遍历器(可以理解成暂停执行)。以后,每次调用这个遍历器的next方法,就从函数体的头部或者上一次停下来的地方开始执行(可以理解成恢复执行),直到遇到下一个yield语句为止。也就是说,next方法就是在遍历yield语句定义的内部状态。
|
||||
当调用Generator函数的时候,该函数并不执行,而是返回一个遍历器(可以理解成暂停执行)。以后,每次调用这个遍历器的next方法,就从函数体的头部或者上一次停下来的地方开始执行(可以理解成恢复执行),直到遇到下一个yield语句为止。也就是说,next方法就是在遍历yield语句定义的内部状态。
|
||||
|
||||
```javascript
|
||||
|
||||
@ -94,11 +94,11 @@ g.next(true) // { value: 0, done: false }
|
||||
|
||||
```
|
||||
|
||||
上面代码先定义了一个可以无限运行的generator函数f,如果next方法没有参数,每次运行到yield语句,变量reset的值总是undefined。当next方法带一个参数true时,当前的变量reset就被重置为这个参数(即true),因此i会等于-1,下一轮循环就会从-1开始递增。
|
||||
上面代码先定义了一个可以无限运行的Generator函数f,如果next方法没有参数,每次运行到yield语句,变量reset的值总是undefined。当next方法带一个参数true时,当前的变量reset就被重置为这个参数(即true),因此i会等于-1,下一轮循环就会从-1开始递增。
|
||||
|
||||
## 异步操作的应用
|
||||
|
||||
generator函数的这种暂停执行的效果,意味着可以把异步操作写在yield语句里面,等到调用next方法时再往后执行。这实际上等同于不需要写回调函数了,因为异步操作的后续操作可以放在yield语句下面,反正要等到调用next方法时再执行。所以,generator函数的一个重要实际意义就是用来处理异步操作,改写回调函数。
|
||||
Generator函数的这种暂停执行的效果,意味着可以把异步操作写在yield语句里面,等到调用next方法时再往后执行。这实际上等同于不需要写回调函数了,因为异步操作的后续操作可以放在yield语句下面,反正要等到调用next方法时再执行。所以,Generator函数的一个重要实际意义就是用来处理异步操作,改写回调函数。
|
||||
|
||||
```javascript
|
||||
|
||||
@ -147,7 +147,7 @@ function scheduler(task) {
|
||||
|
||||
```
|
||||
|
||||
注意,yield语句是同步运行,不是异步运行(否则就失去了取代回调函数的设计目的了)。实际操作中,一般让yield语句返回Promises对象。
|
||||
注意,yield语句是同步运行,不是异步运行(否则就失去了取代回调函数的设计目的了)。实际操作中,一般让yield语句返回Promise对象。
|
||||
|
||||
```javascript
|
||||
|
||||
|
@ -22,7 +22,7 @@ ECMAScript是JavaScript语言的国际标准,JavaScript是ECMAScript的实现
|
||||
|
||||
2008年7月,由于对于下一个版本应该包括哪些功能,各方分歧太大,争论过于激进,ECMA开会决定,中止ECMAScript 4.0的开发,将其中涉及现有功能改善的一小部分,发布为ECMAScript 3.1,而将其他激进的设想扩大范围,放入以后的版本,由于会议的气氛,该版本的项目代号起名为Harmony(和谐)。会后不久,ECMAScript 3.1就改名为ECMAScript 5。
|
||||
|
||||
2009年12月,ECMAScript 5.0版正式发布。Harmony项目则一分为二,一些较为可行的设想定名为Javascript.next继续开发,后来演变成ECMAScript 6;一些不是很成熟的设想,则被视为JavaScript.next.next,在更远的将来再考虑推出。
|
||||
2009年12月,ECMAScript 5.0版正式发布。Harmony项目则一分为二,一些较为可行的设想定名为JavaScript.next继续开发,后来演变成ECMAScript 6;一些不是很成熟的设想,则被视为JavaScript.next.next,在更远的将来再考虑推出。
|
||||
|
||||
2011年6月,ECMAscript 5.1版发布,并且成为ISO国际标准(ISO/IEC 16262:2011)。
|
||||
|
||||
@ -38,9 +38,9 @@ ECMA的第39号技术专家委员会(Technical Committee 39,简称TC39)负
|
||||
|
||||
由于ES6还没有定案,有些语法规则还会变动,目前支持ES6的软件和开发环境还不多。各大浏览器的最新版本,对ES6的支持可以查看[kangax.github.io/es5-compat-table/es6/](http://kangax.github.io/es5-compat-table/es6/)。
|
||||
|
||||
Google公司的V8引擎已经部署了ES6的部分特性。使用node.js 0.11版,就可以体验这些特性。
|
||||
Google公司的V8引擎已经部署了ES6的部分特性。使用Node.js 0.11版,就可以体验这些特性。
|
||||
|
||||
node.js的0.11版还不是稳定版本,要使用版本管理工具[nvm](https://github.com/creationix/nvm)切换。下载nvm以后,进入项目目录,运行下面的命令。
|
||||
Node.js的0.11版还不是稳定版本,要使用版本管理工具[nvm](https://github.com/creationix/nvm)切换。下载nvm以后,进入项目目录,运行下面的命令。
|
||||
|
||||
```bash
|
||||
|
||||
@ -211,7 +211,7 @@ traceur --script calc.es6.js --out calc.es5.js --experimental
|
||||
|
||||
**(4)Node.js环境的用法**
|
||||
|
||||
Traceur的node.js用法如下(假定已安装traceur模块)。
|
||||
Traceur的Node.js用法如下(假定已安装traceur模块)。
|
||||
|
||||
```javascript
|
||||
|
||||
|
@ -169,9 +169,9 @@ a["last word"] // "world"
|
||||
|
||||
```
|
||||
|
||||
## symbols
|
||||
## Symbol
|
||||
|
||||
ES6引入了一种新的原始数据类型symbol。它通过Symbol函数生成。
|
||||
ES6引入了一种新的原始数据类型Symbol。它通过Symbol函数生成。
|
||||
|
||||
```javascript
|
||||
|
||||
@ -185,11 +185,11 @@ typeof mySymbol
|
||||
|
||||
```
|
||||
|
||||
上面代码表示,Symbol函数接受一个字符串作为参数,用来指定生成的symbol的名称,可以通过name属性读取。typeof运算符的结果,表明Symbol是一种单独的数据类型。
|
||||
上面代码表示,Symbol函数接受一个字符串作为参数,用来指定生成的Symbol的名称,可以通过name属性读取。typeof运算符的结果,表明Symbol是一种单独的数据类型。
|
||||
|
||||
注意,Symbol函数前不能使用new命令,否则会报错。这是因为生成的symbol是一个原始类型的值,不是对象。
|
||||
注意,Symbol函数前不能使用new命令,否则会报错。这是因为生成的Symbol是一个原始类型的值,不是对象。
|
||||
|
||||
symbol的最大特点,就是每一个symbol都是不相等的,保证产生一个独一无二的值。
|
||||
symbol的最大特点,就是每一个Symbol都是不相等的,保证产生一个独一无二的值。
|
||||
|
||||
```javascript
|
||||
|
||||
@ -240,7 +240,7 @@ a.size // 1
|
||||
|
||||
```
|
||||
|
||||
如果要在对象内部使用symbol属性名,必须采用属性名表达式。
|
||||
如果要在对象内部使用Symbol属性名,必须采用属性名表达式。
|
||||
|
||||
```javascript
|
||||
|
||||
|
@ -146,7 +146,7 @@ Promise.all方法用于将多个异步操作(或Promise对象),包装成
|
||||
|
||||
```javascript
|
||||
|
||||
// 生成一个promise对象的数组
|
||||
// 生成一个Promise对象的数组
|
||||
var promises = [2, 3, 5, 7, 11, 13].map(function(id){
|
||||
return getJSON("/post/" + id + ".json");
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user