学问是经验的积累,才能是刻苦的忍耐
关于JS的继承和混合(mixin)相关内容
继承
组合继承
1 | function SuperType(name) { |
使用组合继承的唯一问题就是会调用两次父类的构造函数,而寄生组合继承则不会这样
寄生组合继承
1 | function SuperType(name) { |
混合(mixin)
显示混入
1 | function mixin(sourceObj, targetObj) { |
混入的思想就是:将源对象中的属性复制
到目标对象上
基于显示混入存在一种变体的寄生继承
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27// "传统的JavaScript类" Vehicle
function Vehicle() {
this.engines = 1
}
Vehicle.prototype.ignition = function() {
console.log("Turning on my engine")
}
Vehicle.prototype.drive = function() {
this.ignition()
console.log("Steering and moving forward!")
}
// "寄生类" Car
function Car() {
// 首先 car 是一个Vehicle对象
let car = new Vehicle()
// 对 car 进行定制
car.wheels = 4
// 保存 Vehicle 的 drive 方法
let superDrive = car.drive
// 重写 car 的 drive 方法
car.drive = function() {
superDrive.call(this)
console.log("Rolling on all " + this.theels + " Wheels!")
}
}
这种继承感觉上比上面的寄生组合继承还要好一点,少调用了一次Object.create()
方法,但是抛弃了new Car()
时创建的对象
隐式混入
1 | var Something = { |