Skip to content

Commit e26516f

Browse files
committed
edit object
1 parent 7c2ba1b commit e26516f

File tree

3 files changed

+38
-9
lines changed

3 files changed

+38
-9
lines changed

docs/class.md

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,10 @@ class Point{
4949
}
5050

5151
typeof Point // "function"
52+
Point === Point.prototype.constructor // true
5253
```
5354

54-
上面代码表明,类的数据类型就是函数。
55+
上面代码表明,类的数据类型就是函数,类本身就指向构造函数
5556

5657
构造函数的prototype属性,在ES6的“类”上面继续存在。事实上,类的所有方法都定义在类的prototype属性上面。
5758

@@ -282,15 +283,15 @@ const MyClass = class Me {
282283
};
283284
```
284285

285-
上面代码使用表达式定义了一个类。需要注意的是,这个类的名字是MyClass而不是Me,Me只在Class的内部代码可用,指代当前类。
286+
上面代码使用表达式定义了一个类。需要注意的是,这个类的名字是MyClass而不是`Me``Me`只在Class的内部代码可用,指代当前类。
286287

287288
```javascript
288289
let inst = new MyClass();
289290
inst.getClassName() // Me
290291
Me.name // ReferenceError: Me is not defined
291292
```
292293

293-
上面代码表示,Me只在Class内部有定义
294+
上面代码表示,`Me`只在Class内部有定义
294295

295296
如果Class内部没用到的话,可以省略Me,也就是可以写成下面的形式。
296297

@@ -347,7 +348,7 @@ class Foo {}
347348

348349
### 基本用法
349350

350-
Class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多。
351+
Class之间可以通过`extends`关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多。
351352

352353
```javascript
353354
class ColorPoint extends Point {}
@@ -397,7 +398,7 @@ constructor(...args) {
397398
}
398399
```
399400

400-
另一个需要注意的地方是,在子类的构造函数中,只有调用super之后,才可以使用this关键字,否则会报错。这是因为子类实例的构建,是基于对父类实例加工,只有super方法才能返回父类实例。
401+
另一个需要注意的地方是,在子类的构造函数中,只有调用super之后,才可以使用`this`关键字,否则会报错。这是因为子类实例的构建,是基于对父类实例加工,只有super方法才能返回父类实例。
401402

402403
```javascript
403404
class Point {
@@ -532,7 +533,7 @@ A.prototype.__proto__ === Object.prototype // true
532533

533534
这种情况下,A作为一个基类(即不存在任何继承),就是一个普通函数,所以直接继承`Funciton.prototype`。但是,A调用后返回一个空对象(即Object实例),所以`A.prototype.__proto__`指向构造函数(Object)的prototype属性。
534535

535-
第三种特殊情况,子类继承null
536+
第三种特殊情况,子类继承`null`
536537

537538
```javascript
538539
class A extends null {
@@ -767,7 +768,7 @@ inst.prop
767768
// 'getter'
768769
```
769770
770-
上面代码中,prop属性有对应的存值函数和取值函数,因此赋值和读取行为都被自定义了。
771+
上面代码中,`prop`属性有对应的存值函数和取值函数,因此赋值和读取行为都被自定义了。
771772
772773
存值函数和取值函数是设置在属性的descriptor对象上的。
773774
@@ -898,7 +899,17 @@ Bar.classMethod();
898899
899900
静态属性指的是Class本身的属性,即`Class.propname`,而不是定义在实例对象(`this`)上的属性。
900901
901-
ES6明确规定,类只有静态方法,没有静态属性,即像`Class.propname`这样的用法不存在。
902+
```javascript
903+
class Foo {
904+
}
905+
906+
Foo.prop = 1;
907+
Foo.prop // 1
908+
```
909+
910+
上面的写法可以读写`Foo`类的静态属性`prop`
911+
912+
目前,只有这种写法可行,因为ES6明确规定,Class内部只有静态方法,没有静态属性。
902913
903914
```javascript
904915
// 以下两种写法都无效,

docs/module.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export {
9797
};
9898
```
9999

100-
上面代码使用as关键字,重命名了函数v1和v2的对外接口。重命名后,v2可以用不同的名字输出两次
100+
上面代码使用`as`关键字,重命名了函数`v1``v2`的对外接口。重命名后,`v2`可以用不同的名字输出两次
101101

102102
最后,`export`命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错,下面的`import`命令也是如此。
103103

@@ -157,6 +157,16 @@ export { Car }
157157

158158
上面的模块先加载`Vehicle`模块,然后在其基础上添加了`move`方法,再作为一个新模块输出。
159159

160+
注意,`import`命令具有提升效果,会提升到整个模块的头部,首先执行。
161+
162+
```javascript
163+
foo();
164+
165+
import { foo } from 'my_module';
166+
```
167+
168+
上面的代码不会报错,因为`import`的执行早于`foo`的调用。
169+
160170
如果在一个模块之中,先输入后输出同一个模块,`import`语句可以与`export`语句写在一起。
161171

162172
```javascript

docs/symbol.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,14 @@ a2[1] = 6;
394394

395395
对象的`Symbol.species`属性,指向一个方法。该对象作为构造函数创造实例时,会调用这个方法。即如果`this.constructor[Symbol.species]`存在,就会使用这个属性作为构造函数,来创造新的实例对象。
396396

397+
`Symbol.species`属性默认的读取器如下。
398+
399+
```javascript
400+
static get [Symbol.species]() {
401+
return this;
402+
}
403+
```
404+
397405
### Symbol.match
398406

399407
对象的`Symbol.match`属性,指向一个函数。当执行`str.match(myObject)`时,如果该属性存在,会调用它,返回该方法的返回值。

0 commit comments

Comments
 (0)