mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-25 03:02:21 +00:00
docs(class): edit extends
This commit is contained in:
parent
baabc6fc2c
commit
fdf489eafb
@ -492,7 +492,7 @@ Object.setPrototypeOf(B, A);
|
|||||||
|
|
||||||
《对象的扩展》一章给出过`Object.setPrototypeOf`方法的实现。
|
《对象的扩展》一章给出过`Object.setPrototypeOf`方法的实现。
|
||||||
|
|
||||||
```
|
```javascript
|
||||||
Object.setPrototypeOf = function (obj, proto) {
|
Object.setPrototypeOf = function (obj, proto) {
|
||||||
obj.__proto__ = proto;
|
obj.__proto__ = proto;
|
||||||
return obj;
|
return obj;
|
||||||
@ -514,7 +514,7 @@ B.__proto__ = A;
|
|||||||
这两条继承链,可以这样理解:作为一个对象,子类(`B`)的原型(`__proto__`属性)是父类(`A`);作为一个构造函数,子类(`B`)的原型(`prototype`属性)是父类的实例。
|
这两条继承链,可以这样理解:作为一个对象,子类(`B`)的原型(`__proto__`属性)是父类(`A`);作为一个构造函数,子类(`B`)的原型(`prototype`属性)是父类的实例。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
B.prototype = new A();
|
bject.create(A.prototype);
|
||||||
// 等同于
|
// 等同于
|
||||||
B.prototype.__proto__ = A.prototype;
|
B.prototype.__proto__ = A.prototype;
|
||||||
```
|
```
|
||||||
@ -528,7 +528,7 @@ class B extends A {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码的`A`,只要是一个有`prototype`属性的函数,就能被`B`继承。由于函数都有`prototype`属性,因此`A`可以是任意函数。
|
上面代码的`A`,只要是一个有`prototype`属性的函数,就能被`B`继承。由于函数都有`prototype`属性(除了`Function.prototype`函数),因此`A`可以是任意函数。
|
||||||
|
|
||||||
下面,讨论三种特殊情况。
|
下面,讨论三种特殊情况。
|
||||||
|
|
||||||
|
@ -396,7 +396,7 @@ class Foo {
|
|||||||
|
|
||||||
### Map结构的目的和基本用法
|
### Map结构的目的和基本用法
|
||||||
|
|
||||||
JavaScript的对象(Object),本质上是键值对的集合(Hash结构),但是只能用字符串当作键。这给它的使用带来了很大的限制。
|
JavaScript的对象(Object),本质上是键值对的集合(Hash结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var data = {};
|
var data = {};
|
||||||
@ -406,7 +406,7 @@ data[element] = metadata;
|
|||||||
data["[Object HTMLDivElement]"] // metadata
|
data["[Object HTMLDivElement]"] // metadata
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码原意是将一个DOM节点作为对象data的键,但是由于对象只接受字符串作为键名,所以`element`被自动转为字符串`[Object HTMLDivElement]`。
|
上面代码原意是将一个DOM节点作为对象`data`的键,但是由于对象只接受字符串作为键名,所以`element`被自动转为字符串`[Object HTMLDivElement]`。
|
||||||
|
|
||||||
为了解决这个问题,ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。
|
为了解决这个问题,ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。
|
||||||
|
|
||||||
@ -422,7 +422,7 @@ m.delete(o) // true
|
|||||||
m.has(o) // false
|
m.has(o) // false
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码使用`set`方法,将对象`o`当作m的一个键,然后又使用`get`方法读取这个键,接着使用`delete`方法删除了这个键。
|
上面代码使用`set`方法,将对象`o`当作`m`的一个键,然后又使用`get`方法读取这个键,接着使用`delete`方法删除了这个键。
|
||||||
|
|
||||||
作为构造函数,Map也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
|
作为构造函数,Map也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user