类:
一种有共同特性的事物的集合,是一个较为抽象的概念。比如人类,指一个范围;
类的声明
在ES6中可以使用class 关键字定义类,class可以被看做是一个语法糖;
注意在类的内部默认是使用严格模式;
类的继承
Class通过 extends 关键字实现继承。
如果只需继承父类的方法则不需要添加constructor。
在子类的
constructor
方法中,只有调用super
之后,才可以使用this
关键字,否则会报错。
super负责初始化this.相当于ES5中的call和apply方法
构造函数继承
子类继承父类,通过call/apply改变父类构造函数的this指向
这里只实现了部分继承,仅继承了父类的属性,并没有继承父类的原型对象上的方法
要继承父类的方法需要借助原型链实现继承
让子构造函数的 prototype 等于父 构造函数实例出来的一个对象
这样就可以获取到 父构造函数的 方法 在修改时也不会 改变父构造函数的 prototype
但是上面这一步相当于 把 子构造函数的 prototype 全部修改赋值
子构造函数 内已经没有了 constructor 所以我们要重新给他创造一个constructor
call()、apply()、bind() 的用法与区别
这三种方法都可以修改this指向
这三个函数的第一个参数都是 this 的指向对象
call
第一个参数是 this 的指向对象
第二个,第三个参数允许是任何类型,直接写入,用逗号隔开
apply
第一个参数是 this 的指向对象
第二个参数是 必须是一个数组 存着数组的变量也可以
所以 apply方法一般和数组结合使用
这里封装了一个求和函数
利用apply方法 修改了fun()函数内的this指向
bind
第一个参数是 this 的指向对象
第二个,第三个参数允许是任何类型,直接写入,用逗号隔开
bind方法与call,apply的区别是bind不会调用函数,只修改this指向