@@ -442,7 +442,7 @@ A.__proto__ === Function.prototype // true
442
442
A .prototype .__proto__ === Object .prototype // true
443
443
```
444
444
445
- 这种情况下,A作为一个基类 (即不存在任何继承),就是一个普通函数,所以直接继承` Function.prototype ` 。但是,` A ` 调用后返回一个空对象(即` Object ` 实例),所以` A.prototype.__proto__ ` 指向构造函数(` Object ` )的` prototype ` 属性。
445
+ 这种情况下,` A ` 作为一个基类 (即不存在任何继承),就是一个普通函数,所以直接继承` Function.prototype ` 。但是,` A ` 调用后返回一个空对象(即` Object ` 实例),所以` A.prototype.__proto__ ` 指向构造函数(` Object ` )的` prototype ` 属性。
446
446
447
447
第三种特殊情况,子类继承` null ` 。
448
448
@@ -454,7 +454,7 @@ A.__proto__ === Function.prototype // true
454
454
A .prototype .__proto__ === undefined // true
455
455
```
456
456
457
- 这种情况与第二种情况非常像。` A ` 也是一个普通函数,所以直接继承` Function.prototype ` 。但是,A调用后返回的对象不继承任何方法 ,所以它的` __proto__ ` 指向` Function.prototype ` ,即实质上执行了下面的代码。
457
+ 这种情况与第二种情况非常像。` A ` 也是一个普通函数,所以直接继承` Function.prototype ` 。但是,` A ` 调用后返回的对象不继承任何方法 ,所以它的` __proto__ ` 指向` Function.prototype ` ,即实质上执行了下面的代码。
458
458
459
459
``` javascript
460
460
class C extends null {
@@ -592,16 +592,18 @@ x.history // [[]]
592
592
593
593
x .commit ();
594
594
x .history // [[], [1, 2]]
595
+
595
596
x .push (3 );
596
597
x // [1, 2, 3]
598
+ x .history // [[], [1, 2]]
597
599
598
600
x .revert ();
599
601
x // [1, 2]
600
602
` ` `
601
603
602
- 上面代码中,` VersionedArray` 结构会通过 ` commit` 方法,将自己的当前状态存入 ` history` 属性,然后通过 ` revert` 方法,可以撤销当前版本,回到上一个版本 。除此之外,` VersionedArray` 依然是一个数组 ,所有原生的数组方法都可以在它上面调用。
604
+ 上面代码中,` VersionedArray` 会通过 ` commit` 方法,将自己的当前状态生成一个版本快照,存入 ` history` 属性。 ` revert` 方法用来将数组重置为最新一次保存的版本 。除此之外,` VersionedArray` 依然是一个普通数组 ,所有原生的数组方法都可以在它上面调用。
603
605
604
- 下面是一个自定义` Error ` 子类的例子。
606
+ 下面是一个自定义` Error ` 子类的例子,可以用来定制报错时的行为 。
605
607
606
608
` ` ` javascript
607
609
class ExtendableError extends Error {
@@ -638,10 +640,10 @@ class NewObj extends Object{
638
640
}
639
641
}
640
642
var o = new NewObj ({attr: true });
641
- console . log ( o .attr === true ); // false
643
+ o .attr === true // false
642
644
` ` `
643
645
644
- 上面代码中,` NewObj` 继承了` Object ` ,但是无法通过` super ` 方法向父类` Object ` 传参。这是因为ES6改变了 ` Object ` 构造函数的行为,一旦发现` Object ` 方法不是通过` new Object ()` 这种形式调用,ES6 规定` Object ` 构造函数会忽略参数。
646
+ 上面代码中,` NewObj` 继承了` Object ` ,但是无法通过` super ` 方法向父类` Object ` 传参。这是因为 ES6 改变了 ` Object ` 构造函数的行为,一旦发现` Object ` 方法不是通过` new Object ()` 这种形式调用,ES6 规定` Object ` 构造函数会忽略参数。
645
647
646
648
## Mixin 模式的实现
647
649
0 commit comments