你不知道的JS-读书笔记(四)--混合对象类

寄生继承

//“传统的 JavaScript 类” Vehicle
function Vehicle() {
  this.ehgines = 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
var car = new Vehicle();
  // 接着我们对 car 进行定制
  car.wheels = 4;

  // 保存到 Vehicle::drive() 的特殊引用
  var vehDrive = car.drive;

  // 重写 Vehicle::drive()
  car.drive = function() {
    vehDrive.call( this );
    console.log("Rolling on all " + this.wheels + " wheels!"
  );
  return car;
}
var myCar = new Car(); // var myCay = Car(); 更好,避免创建并丢弃多余的对象
myCar.drive()
// "Turning on my engine."
// "Steering and moving forward!"
// "Rolling on all 4 wheels!"

小结

传统的类被实例化时, 它的行为会被复制到实例中。 类被继承时, 行为也会被复制到子类中。

多态(在继承链的不同层次名称相同但是功能不同的函数) 看起来似乎是从子类引用父类, 但是本质上引用的其实是复制的结果。

JavaScript 并不会(像类那样) 自动创建对象的副本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值