美文网首页
重写父类的方法

重写父类的方法

作者: SingleDiego | 来源:发表于2019-06-18 22:37 被阅读0次

我们让 Circle 继承 Shape,并让 Circle 拥有自己独特的 duplicate 方法:

// 传入两个构造函数,实现继承
function extend(Child, Parent) {
  Child.prototype = Object.create(Parent.prototype);
  Child.prototype.construcor = Child;
};

// 父类
function Shape(color) {};

// 父类方法
Shape.prototype.duplicate = function() {
  console.log('duplicate')
};

// 子类
function Circle(color, radius) {};

// Circle 继承 Shape
extend(Circle, Shape)

// 重新定义父类的 duplicate 方法
// 重新定义要在继承之后
Circle.prototype.duplicate = function() {
  console.log('circle duplicate')
};

const c = new Circle('red', 1)

测试:

c.duplicate()
// circle duplicate

为什么可以这样修改是可以生效的呢?因为当我们访问对象成员时。Javascript 编译器会沿着继承路径向上查找。

本例中,我们执行 c.duplicate() 时,编译器先查找 Circle.prototype 中的 duplicate 方法,能找得到这个方法就执行。否则再查找 Shape.prototype 里面的方法。




如果我们想直接调用父类的方法,也是可行的:

// 传入两个构造函数,实现继承
function extend(Child, Parent) {
  Child.prototype = Object.create(Parent.prototype);
  Child.prototype.construcor = Child;
}

// 父类
function Shape(color) {};

// 父类方法
Shape.prototype.duplicate = function() {
  console.log('duplicate')
};

// 子类
function Circle(color, radius) {};

// Circle 继承 Shape
extend(Circle, Shape)

// 重新定义父类的 duplicate 方法
Circle.prototype.duplicate = function() {
  // 直接调用父类方法
  Shape.prototype.duplicate();
  console.log('circle duplicate')
};

const c = new Circle('red', 1)

测试:

c.duplicate()
// duplicate
// circle duplicate

相关文章

  • swift中子类重写父类的方法

    子类在主体中重写父类的方法 如果重写的父类方法在主体中,直接重写即可,如果重写的父类方法在extension中,父...

  • 类的定义与继承

    类 类的继承 重写,子类可以重写父类的方法和属性 子类里,如果重写了父类的方法后,如果还想调用父类的方法,通过su...

  • 重写(=覆盖)、重载

    override(重写、覆盖): 子类在继承父类时,重写(重新实现)父类中的方法。 重写(覆盖)的规则: 重写方法...

  • 8,Python面向对象3

    重写父类方法 1. 重写父类方法 所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同...

  • Swift 重写override和重载overload

    1.重写override 重写是子类继承父类,重写父类的方法。 重写方法的参数列表必须完全与被重写的方法相同。重写...

  • swift overrid 跟 overload

    1.重写override 重写是子类继承父类,重写父类的方法。 重写方法的参数列表必须完全与被重写的方法相同。重写...

  • 2018-07-10

    JAVA重写的条件 条件: 子类继承父类,并重写父类的方法 1、 重写要求子类中的覆盖方法与父类中被覆盖的方法有...

  • Java 注解

    @Override @Override 用来重写父类方法 / 或实现接口方法。 实现接口 重写父类接口

  • php方法重写规则

    final修饰的类方法不可被子类重写 PHP是否重写父类方法只会根据方法名是否一致判断(5.3以后重写父类方法参数...

  • 类继承之方法重写

    类继承之方法重写: 方法重写 含义 : 如果你的父类方法的功能不能满足子类的需求,可以在子类重写你父类的方法 例子...

网友评论

      本文标题:重写父类的方法

      本文链接:https://www.haomeiwen.com/subject/hhqcqctx.html