JavaScript 原型继承

JavaScript 原型继承

JavaScript 原型继承是一种非常重要的概念,相较于传统的面向对象语言中的继承,JavaScript 通过原型继承来实现对象之间的属性和方法的共享,它是 JavaScript 中最为灵活的一种继承方式。

定义

JavaScript 中的每个对象(除了 null)都有一个原型对象,原型对象可以通过 Object.getPrototypeOf() 或者 proto 属性访问,每个原型对象又有一个自己的原型,直到最后一个原型对象为 null。null 没有原型。

一个对象从原型对象中继承属性和方法,就像 C++ 或 Java 语言中的继承一样。原型对象也是一个对象,所以可以继承其他原型对象的属性和方法,我们把原型对象的继承叫做原型链继承。

示例

// 定义一个父类
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// 在父类的原型上添加一个 eat 方法
Person.prototype.eat = function() {
  console.log(this.name + ' is eating');
}

// 定义一个子类
function Student(name, age, grade) {
  this.name = name;
  this.age = age;
  this.grade = grade;
}

// 将子类的原型设置为父类的实例,实现原型继承
Student.prototype = new Person();

// 在子类的原型上添加一个 study 方法
Student.prototype.study = function() {
  console.log(this.name + ' is studying');
}

// 创建一个子类的实例
var student = new Student('Tom', 18, 'high school');

// 子类实例既可以调用子类自身定义的方法,也可以调用父类的方法
student.study(); // Tom is studying
student.eat(); // Tom is eating

在上述示例中,我们定义了一个父类 Person 和一个子类 StudentStudent 类继承了 Person 类,实现原型继承。Person 类原型上定义了一个 eat 方法,Student 类原型上定义了一个 study 方法。创建了一个 Student 类的实例 student,实例 student 既可以调用自己定义的方法 study,也可以调用父类的方法 eat

示例

// 定义一个父类
function Animal(name) {
  this.name = name;
}

// 在父类的原型上添加一个 run 方法
Animal.prototype.run = function() {
  console.log('Animal ' + this.name + ' is running');
}

// 定义一个子类
function Cat(name) {
  // 调用父类的构造函数
  Animal.call(this, name);
}

// 将子类的原型设置为父类的实例,实现原型继承
Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Cat;

// 在子类的原型上添加一个 catchMouse 方法
Cat.prototype.catchMouse = function() {
  console.log('Cat ' + this.name + ' is catching mouse');
}

// 创建一个子类的实例
var cat = new Cat('Tom');

// 子类实例既可以调用子类自身定义的方法,也可以调用父类的方法
cat.catchMouse(); // Cat Tom is catching mouse
cat.run(); // Animal Tom is running

在这个示例中,我们同样定义了一个父类 Animal 和一个子类 CatCat 类继承了 Animal 类,也是通过原型继承实现。然而,与上一个示例不同的是,在 Cat 类中我们使用了 call() 方法调用了父类的构造函数来继承父类的属性,同时通过 Object.create() 方法将子类的原型设置为 Animal 类的原型。最后在子类的原型上定义了自己的方法 catchMouse。创建了一个 Cat 类的实例 cat,实例 cat 既可以调用自己定义的方法 catchMouse,也可以调用父类的方法 run

总之,JavaScript 的原型继承,用起来非常灵活,也非常强大。需要利用好原型链上的关系,多写多练,在实际开发中灵活运用,才能更好地理解 JavaScript 原型继承的思想。

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

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

相关文章

  • JS使用window.requestAnimationFrame()对列表切片进行渲染

    当需要对一个大型列表进行渲染时,最好使用requestAnimationFrame()代替setTimeout()或setInterval(),因为requestAnimationFrame()会在每一帧结束后更新状态,这比定时器更精确地匹配帧率并避免过多的重绘。 以下是使用window.requestAnimationFrame()对列表切片进行渲染的攻略…

    JavaScript 2023年6月11日
    00
  • JavaScript中箭头函数与普通函数的区别详解

    下面是“JavaScript中箭头函数与普通函数的区别详解”的完整攻略。 一、前言 在ES6的时代,随着箭头函数的引入,它逐渐被越来越多的开发者所使用,那么箭头函数和普通函数又有何区别呢?接下来,我们将从诸如函数内部的this、arguments、new、原型等角度来详细讲解两种函数的异同。 二、this 普通函数中的this是由函数的调用方式动态绑定的,而…

    JavaScript 2023年5月27日
    00
  • ajax和jsonp跨域的原理本质详解

    针对“Ajax和JSONP跨域的原理本质”这一话题,我准备了以下的完整攻略。 一、同源策略 同源策略,是一种安全策略,它限制了一个源(域名、协议、端口)下的文档或脚本如何能与另一个源(域名、协议、端口)下的资源进行交互。 二、JSONP 跨域 JSONP是一种跨域的技术手段,发起JSONP请求时,服务器端返回指定格式的数据,并在响应中将需要返回的数据作为参数…

    JavaScript 2023年6月11日
    00
  • javascript 闭包详解及简单实例应用

    JavaScript 闭包详解及简单实例应用 在 JavaScript 中,闭包是一个重要的概念,也是一个令人困惑的概念。理解闭包的概念和用法,可以大幅提高你的 JavaScript 编程水平。在这篇文章中,我们将介绍什么是闭包,为什么需要它们,并且演示几个具体的使用场景。 什么是闭包? 闭包是指在函数内部定义的函数,该函数可以访问在外部函数作用域中声明的变…

    JavaScript 2023年6月11日
    00
  • JavaScript中undefined和is not defined的区别与异常处理

    JavaScript中undefined与is not defined的区别与异常处理攻略 在JavaScript编程中,我们可能会遇到两种情况:一个是使用undefined变量,一个是使用未定义的变量(is not defined)。虽然在表象上看起来很相似,但实际上它们是不同的,并且需要不同的处理方法。在这篇攻略中,我将向您展示它们的区别,以及如何在代码…

    JavaScript 2023年5月18日
    00
  • javascript简单比较日期大小的方法

    下面是关于“JavaScript简单比较日期大小的方法”的完整攻略。 核心思路 在JavaScript中,我们可以先将日期转换成时间戳,在比较时间戳大小来实现比较日期的大小。具体步骤包括: 将日期转换成时间戳; 比较时间戳大小,即可得出日期的大小。 实现方法 方法一:使用Date对象 const date1 = new Date("2021-01-…

    JavaScript 2023年5月27日
    00
  • ThinkPHP表单数据智能写入create方法实例分析

    我来详细讲解一下“ThinkPHP表单数据智能写入create方法实例分析”的完整攻略。 什么是ThinkPHP表单数据智能写入create方法? 在ThinkPHP框架中,使用create方法可以将表单数据智能写入到数据库中。这个方法可以将表单中的数据自动映射到对应的模型属性中,并且会过滤掉一些非法的字段,确保插入的数据安全可靠。 怎样使用create方法…

    JavaScript 2023年6月11日
    00
  • JavaScript实现获取两个排序数组的中位数算法示例

    下面给出详细讲解”JavaScript实现获取两个排序数组的中位数算法示例”的完整攻略: 一、题目简介 中位数是指将一个集合划分为两个长度相等的子集,其中一个子集中元素总是大于另一个子集中的元素。在计算机科学领域中,通常使用中位数来衡量数据集合的总体趋势。在给定的两个排序数组中,实现一个函数来查找两个排序数组合并后的中位数。 二、示例说明 示例一: 输入: …

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