1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00

docs(proxy): edit proxyw

This commit is contained in:
ruanyf 2018-05-20 06:37:23 +08:00
parent 2d86fc3f9c
commit 7c7f1ce7d1
3 changed files with 23 additions and 11 deletions

View File

@ -1233,7 +1233,7 @@ var clock = function* () {
Generator 函数是 ES6 对协程的实现但属于不完全实现。Generator 函数被称为“半协程”semi-coroutine意思是只有 Generator 函数的调用者,才能将程序的执行权还给 Generator 函数。如果是完全执行的协程,任何函数都可以让暂停的协程继续执行。
如果将 Generator 函数当作协程,完全可以将多个需要互相协作的任务写成 Generator 函数,它们之间使用`yield`式交换控制权。
如果将 Generator 函数当作协程,完全可以将多个需要互相协作的任务写成 Generator 函数,它们之间使用`yield`式交换控制权。
### Generator 与上下文

View File

@ -595,10 +595,9 @@ var handler = {
`construct`方法可以接受两个参数。
- `target`: 目标对象
- `args`:构建函数的参数对象
下面是一个例子。
- `target`:目标对象
- `args`:构造函数的参数对象
- `newTarget`:创造实例对象时,`new`命令作用的构造函数(下面例子的`p`
```javascript
var p = new Proxy(function () {}, {
@ -664,11 +663,10 @@ var handler = {
};
var target = {};
var proxy = new Proxy(target, handler);
proxy.foo = 'bar'
// TypeError: proxy defineProperty handler returned false for property '"foo"'
proxy.foo = 'bar' // 不会生效
```
上面代码中,`defineProperty`方法返回`false`,导致添加新属性会抛出错误
上面代码中,`defineProperty`方法返回`false`,导致添加新属性总是无效
注意如果目标对象不可扩展extensible`defineProperty`不能增加目标对象上不存在的属性否则会报错。另外如果目标对象的某个属性不可写writable或不可配置configurable`defineProperty`方法不得改变这两个设置。

View File

@ -132,6 +132,20 @@ codePointLength(s) // 2
上面代码中,不加`u`修饰符,就无法识别非规范的`K`字符。
## RegExp.prototype.unicode 属性
正则实例对象新增`unicode`属性,表示是否设置了`u`修饰符。
```javascript
const r1 = /hello/;
const r2 = /hello/u;
r1.unicode // false
r2.unicode // true
```
上面代码中,正则表达式是否设置了`u`修饰符,可以从`unicode`属性看出来。
## y 修饰符
除了`u`修饰符ES6 还为正则表达式添加了`y`修饰符叫做“粘连”sticky修饰符。
@ -264,16 +278,16 @@ tokenize(TOKEN_G, '3x + 4')
上面代码中,`g`修饰符会忽略非法字符,而`y`修饰符不会,这样就很容易发现错误。
## sticky 属性
## RegExp.prototype.sticky 属性
`y`修饰符相匹配ES6 的正则对象多了`sticky`属性,表示是否设置了`y`修饰符。
`y`修饰符相匹配ES6 的正则实例对象多了`sticky`属性,表示是否设置了`y`修饰符。
```javascript
var r = /hello\d/y;
r.sticky // true
```
## flags 属性
## RegExp.prototype.flags 属性
ES6 为正则表达式新增了`flags`属性,会返回正则表达式的修饰符。