JavaScript 原型继承之构造函数继承

JavaScript 原型继承之构造函数继承攻略

什么是构造函数继承

构造函数继承(也称为经典继承)是一种使用构造函数来创建对象并继承来自父类的属性和方法的方法。这种方式通过在子类的构造函数中调用父类构造函数以继承属性,然后将子类原型设置为父类实例来继承方法。

如何进行构造函数继承

在子类构造函数中,通过调用父类构造函数,来继承父类的属性:

function Parent(name) {
  this.name = name;
}

function Child(name, age) {
  Parent.call(this, name);
  this.age = age;
}

在这个示例中,Child 构造函数继承 Parent 构造函数中的 name 属性,通过 Parent.call(this, name) 调用父类构造函数。

同时,在子类的原型上设置对象 new Parent(),将父类实例的方法继承到子类:

Child.prototype = new Parent();

这种方法存在一个问题,即子类的原型引用了一个父类的实例,这个实例可能会持有不必要的、甚至是有害的属性和方法。因此,建议在上述方式进行原型继承的时候,在将父类的实例赋给子类原型时,应该使用一个不包含任何实例属性和方法的中介函数:

function inherit(C, P) {
    function F() {};
    F.prototype = P.prototype;
    C.prototype = new F();
    // 将子类原型的构造器指向子类
    C.prototype.constructor = C;
}

使用这个 inherit 函数进行构造函数继承示例:

function Parent(name) {
  this.name = name;
}

function Child(name, age) {
  Parent.call(this, name);
  this.age = age;
}

inherit(Child, Parent);

构造函数继承示例

示例一

function Animal(name) {
  this.name = name;
}

Animal.prototype.getName = function() {
  return this.name;
}

function Cat(name, color) {
  Animal.call(this, name);
  this.color = color;
}

// 关键:继承父类的原型
Cat.prototype = new Animal();

var cat = new Cat('Tom', 'White');
console.log(cat.getName()); // 'Tom'
console.log(cat.color); // 'White'

在上述示例中,Cat 继承了 Animal 的构造函数以及原型上定义的 getName 方法,并且在 Cat 构造函数中添加了自己的属性 color。最终通过实例化 Cat 类,来创建一个名字为 Tom、颜色为 White 的猫,并通过 getName 方法来获取猫的名字。

示例二

function Animal(name) {
  this.name = name;
}

Animal.prototype.getName = function() {
  return this.name;
}

function Cat(name, color) {
  Animal.call(this, name);
  this.color = color;
}

// 关键:继承父类的原型
function inherit(child, parent) {
  var F = function() {};
  F.prototype = parent.prototype;
  child.prototype = new F();
  child.prototype.constructor = child;
}

inherit(Cat, Animal);

var cat = new Cat('Tom', 'White');
console.log(cat.getName()); // 'Tom'
console.log(cat.color); // 'White'

在第二个示例中,通过构造函数继承的方式,也成功的继承了 Animal 的构造函数和方法。

总结

构造函数继承是 JavaScript 类继承的经典方式之一。通过继承父类的构造函数属性和将子类的原型属性设置为父类的实例,使子类继承了父类的全部属性和方法。在实践中,建议使用 inherit 函数来帮助进行正确的原型继承。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 原型继承之构造函数继承 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • C/C++合并两个升序链表的方式

    当合并两个已按升序排列的链表时,可以使用指针遍历两个链表,并选择合适的节点插入到一个新链表中。以下是一般的步骤: 创建一个新链表的头结点,并用指针指向它。 使用两个指针,一个指向第一个链表的头结点,另一个指向第二个链表的头结点。 遍历两个链表直到其中一个链表已到达结尾。在每次遍历时选择相对较小的节点并插入到新链表。 如果其中一个链表到达结尾而另一个链表仍然有…

    other 2023年6月27日
    00
  • JSP利用freemarker生成基于word模板的word文档

    JSP利用Freemarker生成基于Word模板的Word文档 在现今的信息化环境中,大量的文档处理都需要将生成的信息导出为Word文档,因此,如何在Web应用中实现Word文档的生成和导出成为了开发者们的一大问题。本文就将介绍如何使用JavaServer Pages(JSP)和Freemarker模板引擎来生成基于Word模板的Word文档。 1. JS…

    其他 2023年3月28日
    00
  • Android启动页出现白屏、黑屏的解决方案

    对于Android应用程序来说,启动页是用户打开应用程序时的第一个页面,是展示应用程序品牌形象和个性化特点的重要组成部分。然而,很多情况下在应用程序启动时会出现白屏或黑屏的情况,给用户的使用体验带来了不良影响,因此,引起了很多 Android 开发者的关注。下面我们将详细介绍 Android 启动页出现白屏、黑屏的解决方案。 问题的根源 在 Android …

    other 2023年6月26日
    00
  • Windows11如何更改系统配置? Win11修改系统环境变量配置的技巧

    下面将详细讲解“Windows11如何更改系统配置? Win11修改系统环境变量配置的技巧”的攻略。 一、修改系统配置 1.打开系统配置工具 首先,在Windows11系统中,我们可以通过打开“运行”窗口来打开系统配置工具。具体操作如下: 1.按下“Win”+“R”组合键,打开“运行”窗口。 2.在“运行”窗口中输入“msconfig”命令,然后点击“确定”…

    other 2023年6月27日
    00
  • SVG 入门——理解viewport,viewbox,preserveAspectRatio

    SVG 入门——理解viewport,viewbox,preserveAspectRatio 什么是SVG? SVG(Scalable Vector Graphics:可缩放矢量图形)是一种用于描述二维矢量图形的XML标准,它可以在任何分辨率下被高保真地显示,也可以被无限放大而不失真,因此非常适合用于图标、图像和动画等场景。 SVG 的基本概念 当我们开始使…

    其他 2023年3月28日
    00
  • 五十五、SAP中调用系统自带的函数

    五十五、SAP中调用系统自带的函数 在SAP开发中,我们经常需要调用系统提供的函数来实现我们的业务需求。这些函数可以帮助我们更快速、高效地完成开发任务,提高开发效率。在本篇文章中,我们将介绍如何在SAP中调用系统自带的函数。 1. 函数的类型 在SAP中,函数大致可以分为以下几种类型: ABAP函数模块:是SAP系统中最基础的函数类型,由ABAP语言编写,可…

    其他 2023年3月28日
    00
  • 如何批量生成MySQL不重复手机号大表实例代码

    当涉及到批量生成MySQL不重复手机号大表时,以下是一个完整的攻略,包含两个示例说明: 1. 使用Python生成不重复手机号数据 首先,我们可以使用Python编写一个脚本来生成不重复的手机号数据。可以使用随机数生成器来生成手机号码,并使用集合(Set)来确保生成的手机号不重复。以下是一个示例代码: import random def generate_p…

    other 2023年10月18日
    00
  • ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD

    ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD 解决方法 当在运行时遇到错误\”ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD\”时,可能是由于以下原因导致的: 缺少所需的ActiveX组件:确保所需的ActiveX组件已正确安装在系统中。可以尝试重新安装或更新相关的组件。 缺少注册表项:检查注册表中是否存…

    other 2023年10月14日
    00
合作推广
合作推广
分享本页
返回顶部