Javascript面向对象之四 继承

Javascript面向对象之四 继承

在 Javascript 中,对象是通过原型 (prototype) 进行继承的。

原型链继承

原型链继承是最常见的继承方式。它的原理是通过把一个对象作为另一个对象的原型来实现继承。

示例1:

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

Animal.prototype.sayName = function() {
  console.log('My name is ' + this.name);
}

function Dog(name, color) {
  this.color = color;
}

// 继承 Animal
Dog.prototype = new Animal();

var dog1 = new Dog('Toby', 'brown');
dog1.sayName(); // My name is Toby

在上面的代码中,我们创建了一个 Animal 构造函数和一个 Dog 构造函数。我们想让 Dog 继承自 Animal,所以通过原型链把 Animal.prototype 赋值为 Dog.prototype 的原型。

借用构造函数继承

借用构造函数继承是通过在子类构造函数中调用父类构造函数来实现继承。

示例2:

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

Animal.prototype.sayName = function() {
  console.log('My name is ' + this.name);
}

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

var dog1 = new Dog('Toby', 'brown');
dog1.sayName(); // 报错: dog1.sayName is not a function

在上面的代码中,我们使用了 Animal.call(this, name) 这种方式来实现继承。这行代码的作用是在 Dog 构造函数中调用 Animal 构造函数,并传入 Dog 构造函数的 thisname 参数。这样我们就能够通过 Dog 构造函数来创建 Dog 的实例对象 dog1

但是这种继承方式不会继承 Animal.prototype 上的方法,所以 dog1.sayName() 会报错。如果我们想让 Dog 继承 Animal 的方法,我们需要在 Dog 构造函数中调用 Animal.call(this, name) 之后再把 Animal.prototype 中的方法复制到 Dog.prototype 中去。

示例3:

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

Animal.prototype.sayName = function() {
  console.log('My name is ' + this.name);
}

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

// 继承 Animal 原型链上的方法
Dog.prototype = Object.create(Animal.prototype);

// 把 Dog.prototype 上的 constructor 设置为 Dog
Dog.prototype.constructor = Dog;

var dog1 = new Dog('Toby', 'brown');
dog1.sayName(); // My name is Toby

在上面的代码中,我们把 Dog.prototype 赋值为 Object.create(Animal.prototype),这样 Dog.prototype 上就继承了 Animal.prototype 上的方法了。我们还需要把 Dog.prototype 上的 constructor 属性设置为 Dog

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript面向对象之四 继承 - Python技术站

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

相关文章

  • 在element-ui的el-tree组件中用render函数生成el-button的实例代码

    下面是详细讲解“在element-ui的el-tree组件中用render函数生成el-button的实例代码”的完整攻略: 确定需求 我们需要在el-tree组件的每一个节点后面添加一个按钮,同时该按钮需要可以点击并绑定事件。 操作步骤 1.在el-tree的render函数中添加按钮 在element-ui的el-tree组件中,我们可以通过重写该组件的…

    JavaScript 2023年6月11日
    00
  • javascript批量修改文件编码格式的方法

    下面是详细讲解”javascript批量修改文件编码格式的方法”的完整攻略。 1. 确定编码格式 在进行批量修改文件编码格式之前,首先要确定文件原始编码格式和目标编码格式。 常见的文件编码格式有UTF-8、GBK、GB2312、BIG5等。 2. 安装必要的工具 在进行文件编码格式转换之前,需要安装一些必要的工具。 iconv-lite:一个非常流行的Nod…

    JavaScript 2023年5月20日
    00
  • JavaScript DOM学习第一章 W3C DOM简介

    JavaScript DOM(Document Object Model)是用于描述文档的抽象表示形式的编程接口,它定义了一组标准对象,这些对象可以与HTML、XML或XHTML文档的元素、文本节点和属性进行交互。 本文主要介绍 W3C DOM (World Wide Web Consortium DOM)的基础知识,包括DOM的版本、DOM树结构、DOM节…

    JavaScript 2023年6月10日
    00
  • Javascript Boolean toSource 方法

    以下是关于JavaScript Boolean对象的toSource()方法的完整攻略。 JavaScript Boolean对象的toSource()方法 JavaScript Boolean对象的toSource()方法返回表示对象源代码的字符串。该方法只在Firefox浏览器中可用,其他浏览器不支持。 下面是一个使用Boolean对象的toSource…

    JavaScript 2023年5月11日
    00
  • js中遍历Map对象的简单实例

    下面我详细讲解一下“JS中遍历Map对象的简单实例”的完整攻略。 1. 什么是Map对象 在JavaScript中,Map对象提供了一种类似字典的数据结构,可以用来存储键值对。Map对象中的键名可以为任何数据类型。而普通对象的键名只能是字符串或者 Symbol 类型。与普通对象不同的是,Map对象中的元素是按照插入顺序存储的。下面是一个Map对象的初始化示例…

    JavaScript 2023年5月27日
    00
  • Node错误处理笔记之挖坑系列教程

    关于“Node错误处理笔记之挖坑系列教程”的完整攻略,我将进行详细的讲解。该攻略主要包含以下几个方面: 一、错误处理的背景和概述 该部分主要介绍了错误处理的重要性和常见的错误处理策略。其中提到了全局错误处理、自定义错误处理、错误码管理等方面的内容。 二、挖坑篇:错误场景分析 该部分主要介绍了一些常见的错误场景,包括异步调用错误、请求参数错误、数据库操作错误等…

    JavaScript 2023年5月28日
    00
  • javascript中基于replace函数的正则表达式语法

    下面是关于“JavaScript中基于replace函数的正则表达式语法”的完整攻略。 什么是正则表达式 正则表达式是一种可以用于匹配字符串模式的工具。它由一些字符和特殊字符组成,可以用来描述和匹配字符串。正则表达式被广泛应用于字符串搜索和替换等操作。 replace函数 在JavaScript中,我们可以使用replace()函数来替换字符串中的部分内容。…

    JavaScript 2023年6月10日
    00
  • Web打印解决方案之普通报表打印功能

    现在我来详细讲解“Web打印解决方案之普通报表打印功能”的完整攻略。 一、概述 普通报表打印是指在Web页面中,将页面中显示的内容按照固定的格式进行排版,然后生成PDF文件,实现打印功能的需求。普通报表相对于复杂报表而言,通常指打印内容相对简单、排版结构较为固定的报表。 实现普通报表打印通常需要以下步骤: 根据需要打印的内容,设计报表模板; 将数据填充到报表…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部