es6-class
es6-class
- 类的内部所有定义的方法,都是不可枚举的
- 父类的静态方法,可以被子类继承。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Object.setPrototypeOf = function (obj, proto) {
obj.__proto__ = proto;
return obj;
}
Object.setPrototypeOf(B.prototype, A.prototype);
// 等同于
B.prototype.__proto__ = A.prototype;
Object.setPrototypeOf(B, A);
// 等同于
B.__proto__ = A;
Object.create(A.prototype);
// 等同于
B.prototype.__proto__ = A.prototype;
super
- this关键字总是指向函数所在的当前对象
- ES6 又新增了另一个类似的关键字super,指向当前对象的原型对象。
JavaScript 引擎内部,super.foo等同于Object.getPrototypeOf(this).foo(属性)或Object.getPrototypeOf(this).foo.call(this)(方法)。
obj各种操作
方法 | 遍历对象 | 枚举 | Symbol属性 |
---|---|---|---|
forin | 对象自身+继承 | 可枚举 | no |
keys | 对象自身 | 可枚举 | no |
stringify | 对象自身 | 可枚举 | |
asign | 对象自身 | 可枚举 | |
getOwnPropertyNames | 对象自身 | 所有 | no |
getOwnPropertySymbols | 对象自身 | - | 仅包含Symbol键名 |
Reflect.ownKeys | 对象自身 | 所有 | 所有 |
- 操作中引入继承的属性会让问题复杂化,所以,尽量不要用for…in循环,而用Object.keys()代替。
Object.getPrototypeOf()(读操作)
Object.setPrototypeOf()(写操作)
Object.create()(生成操作)代替。
- 实现上,
__proto__
调用的是Object.prototype.__proto__