diff --git a/docs/class.md b/docs/class.md index 502305c..29a4084 100644 --- a/docs/class.md +++ b/docs/class.md @@ -624,9 +624,11 @@ class B { // B的实例继承A的实例 Object.setPrototypeOf(B.prototype, A.prototype); +const b = new B(); -// B继承A的静态属性 +// B的实例继承A的静态属性 Object.setPrototypeOf(B, A); +const b = new B(); ``` 《对象的扩展》一章给出过`Object.setPrototypeOf`方法的实现。 diff --git a/docs/object.md b/docs/object.md index e2f7d0b..6e33083 100644 --- a/docs/object.md +++ b/docs/object.md @@ -754,19 +754,19 @@ Object.getPrototypeOf(rec) === Rectangle.prototype // false ``` -## Object.values(),Object.entries() +## Object.keys(),Object.values(),Object.entries() ### Object.keys() -ES5引入了`Object.keys`方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。 +ES5 引入了`Object.keys`方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。 ```javascript -var obj = { foo: "bar", baz: 42 }; +var obj = { foo: 'bar', baz: 42 }; Object.keys(obj) // ["foo", "baz"] ``` -目前,ES7有一个[提案](https://github.com/tc39/proposal-object-values-entries),引入了跟`Object.keys`配套的`Object.values`和`Object.entries`。 +ES2017 [引入](https://github.com/tc39/proposal-object-values-entries)了跟`Object.keys`配套的`Object.values`和`Object.entries`,作为遍历一个对象的补充手段。 ```javascript let {keys, values, entries} = Object; @@ -790,7 +790,7 @@ for (let [key, value] of entries(obj)) { `Object.values`方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。 ```javascript -var obj = { foo: "bar", baz: 42 }; +var obj = { foo: 'bar', baz: 42 }; Object.values(obj) // ["bar", 42] ``` @@ -812,9 +812,9 @@ var obj = Object.create({}, {p: {value: 42}}); Object.values(obj) // [] ``` -上面代码中,`Object.create`方法的第二个参数添加的对象属性(属性`p`),如果不显式声明,默认是不可遍历的。`Object.values`不会返回这个属性。 +上面代码中,`Object.create`方法的第二个参数添加的对象属性(属性`p`),如果不显式声明,默认是不可遍历的,因为`p`是继承的属性,而不是对象自身的属性。`Object.values`不会返回这个属性。 -`Object.values`会过滤属性名为Symbol值的属性。 +`Object.values`会过滤属性名为 Symbol 值的属性。 ```javascript Object.values({ [Symbol()]: 123, foo: 'abc' }); diff --git a/docs/promise.md b/docs/promise.md index 9bf31f2..79b1564 100644 --- a/docs/promise.md +++ b/docs/promise.md @@ -355,7 +355,7 @@ someAsyncThing().then(function() { ```javascript var promise = new Promise(function(resolve, reject) { - resolve("ok"); + resolve('ok'); setTimeout(function() { throw new Error('test') }, 0) }); promise.then(function(value) { console.log(value) }); @@ -363,9 +363,9 @@ promise.then(function(value) { console.log(value) }); // Uncaught Error: test ``` -上面代码中,Promise指定在下一轮“事件循环”再抛出错误,结果由于没有指定使用`try...catch`语句,就冒泡到最外层,成了未捕获的错误。因为此时,Promise的函数体已经运行结束了,所以这个错误是在Promise函数体外抛出的。 +上面代码中,Promise 指定在下一轮“事件循环”再抛出错误,结果由于没有指定使用`try...catch`语句,就冒泡到最外层,成了未捕获的错误。因为此时,Promise的函数体已经运行结束了,所以这个错误是在Promise函数体外抛出的。 -Node.js有一个`unhandledRejection`事件,专门监听未捕获的`reject`错误。 +Node 有一个`unhandledRejection`事件,专门监听未捕获的`reject`错误。 ```javascript process.on('unhandledRejection', function (err, p) { @@ -375,7 +375,7 @@ process.on('unhandledRejection', function (err, p) { 上面代码中,`unhandledRejection`事件的监听函数有两个参数,第一个是错误对象,第二个是报错的Promise实例,它可以用来了解发生错误的环境信息。。 -需要注意的是,`catch`方法返回的还是一个Promise对象,因此后面还可以接着调用`then`方法。 +需要注意的是,`catch`方法返回的还是一个 Promise 对象,因此后面还可以接着调用`then`方法。 ```javascript var someAsyncThing = function() { @@ -776,7 +776,7 @@ run(g); Promise.resolve().then(f) ``` -上面的写法有一个缺点,就是如果`f`是同步函数,那么它会在下一轮事件循环执行。 +上面的写法有一个缺点,就是如果`f`是同步函数,那么它会在本轮事件循环的末尾执行。 ```javascript const f = () => console.log('now'); diff --git a/docs/reference.md b/docs/reference.md index f644980..e9e82e9 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -12,6 +12,7 @@ - [ECMAScript Daily](https://ecmascript-daily.github.io/): TC39委员会的动态 - [The TC39 Process](https://tc39.github.io/process-document/): 提案进入正式规格的流程 - [TC39: A Process Sketch, Stages 0 and 1](https://thefeedbackloop.xyz/tc39-a-process-sketch-stages-0-and-1/): Stage 0 和 Stage 1 的含义 +- [TC39 Process Sketch, Stage 2](https://thefeedbackloop.xyz/tc39-process-sketch-stage-2/): Stage 2 的含义 ## 综合介绍