美文网首页
调用父类构造器

调用父类构造器

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

继续上一篇,在 上一篇的基础上我们在 Shape 类新增一个 color 属性:

// 父类
function Shape(color) {
  this.color = color;
};

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

// 子类
function Circle(color, radius) {
  Shape(color);
  this.radius = radius;
};

// Circle 继承 Shape
Circle.prototype = Object.create(Shape.prototype);
// 修正构造函数
Circle.prototype.construcor = Circle;

// 子类的方法
Circle.prototype.draw = function() {
  console.log('draw');
};

但现在构造函数 Circle() 生成的实例依然是没有 color 这一属性的,即使我们在构造函数 Circle() 中调用了 Shape() 函数。

let c = new Circle('red', 1);
c
// Circle {radius: 1}

而且还产生了一个诡异的情况,我们把 color 属性绑定到了全集变量 window上面去了:

window.color
// "red"

为什么会这样呢,这要从我们使用 new 关键字创建新对象说起。

这在里,调用 new 的时候总共发生3件事:

  1. new 操作符创建一个空对象

  2. this 对象指向这个空对象

  3. 把属性(比如这里的 radius)绑定到新对象上

如果不使用 new 关键字,this 就会默认指向全局对象,也就是浏览器中的 window 或 node 中的 global




要做子类中调用父类的构造器我们使用 call 方法:

// 父类
function Shape(color) {
  this.color = color;
};

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

// 子类
function Circle(color, radius) {
  Shape.call(this, color);
  this.radius = radius;
};

// Circle 继承 Shape
Circle.prototype = Object.create(Shape.prototype);
// 修正构造函数
Circle.prototype.construcor = Circle;

// 子类的方法
Circle.prototype.draw = function() {
  console.log('draw');
};

let c = new Circle('red', 1);

测试:

c
// Circle {color: "red", radius: 1}

相关文章

  • 2_9.super关键字

    1.子类实例化的过程中父类的构造器先被调用,然后在调用子类的构造器 2.子类通过构造器实例化时要调用父类的默认构造...

  • 构造方法总结二

    构造器间的调用规则 指定构造器必须调用其直接父类的"指定构造器" 便利构造器必须调用同类中的其它构造器(指定或便利...

  • swift构造器

    指定构造器 初始化类中提供的所有属性,并根据父类链往上调用父类的构造器来实现父类的初始化。 最终都是通过指定构造器...

  • 对象的初始化过程

    一个对象在创建的过程中,通过调用该类的构造器实现初始化,如果该类有父类,则会先调用父类的构造器,初始化父类的类成员...

  • 调用父类构造器

    January201701 感觉这两天一切有点可怕,熬夜刷题..............................

  • 调用父类构造器

    继续上一篇,在 上一篇的基础上我们在 Shape 类新增一个 color 属性: 但现在构造函数 Circle()...

  • (五)子类实例化过程

    在子类的构造函数中,必须调用父类的构造函数当你不写的时候, 编译器默认给你调用super();(父类的无参构造函数...

  • 继承和构造

    子类构造器的特点: 所有的子类在构造时必须,一定会调用父类的构造方法,若没有显式地调用父类构造方法,那么系统默认调...

  • 子类父类初始化流程

    父类子类在初始化的是执行的流程①子类构造器会隐式调用父类的无参构造方法,如果子类显式利用super调用了父类的有参...

  • JAVA 的继承-子类与父类之间的复杂关系

    调用子类,先进行父类的参数定义和构造器构造,再进行子类的参数定义和构造器构造;如果子类构造器中没有 super()...

网友评论

      本文标题:调用父类构造器

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