在 ES6 之前, JavaScript 没有 class.
JS 使用函数来充当实例的类, 事实上也叫构造函数. 连概念都有点乱, 但情况确实是这样.
看一个创建对象的案例:
// 定义对象类型
function Man(name) {
// 实例的属性
this.name = name;
}
// 实例化出一个对象
let sal = new Man('Sal');
sal.name; // 'Sal'
对象的属性会覆盖 prototype 上的同名属性, 但只在当前对象有用
new Man() 后会做以下事情:
- 创建了一个新对象, 这个对象继承了 Man.prototype.
- this 会绑定到新创建的对象上, 构造函数被调用. new Man 和 new Man() 是一样的.
- 构造函数返回的对象就是结果. 构造函数不显式返回一个对象,则使用步骤1创建的对象。
1、语法
image 表达式
image
2、继承
class可以通过extends关键字实现继承。
image
注意事项:
子类必须在constructor方法中调用super方法,否则新建实例时会报错,这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工,**如果不调用super,子类就得不到this对象**。
补充:
如果子类有和父类一样的方法:需要加上关键字super:
![image](https://img.haomeiwen.com/i8805811/3cce1f89fb2045fe?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
网友评论