JavaScript 原型继承

yizhihongxing

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获取div的background-image属性

    获取 div 的背景图像属性有许多方法,以下是两种基本的方法: 方法一:使用 getComputedStyle() 方法 我们可以使用 getComputedStyle()方法获取到 div 的计算样式,从而获取到背景图像属性。以下是获取 div 的 background-image 属性的代码: const divEl = document.querySe…

    JavaScript 2023年5月19日
    00
  • Javascript中作用域的详细介绍

    Javascript中作用域的详细介绍 Javascript中的作用域是指变量的可见范围,也就是在代码中访问变量的能力。在Javascript中,有全局作用域和局部作用域之分。在全局作用域中声明的变量,可以被程序中的任何其他代码所访问,而在局部作用域中声明的变量,只能被函数内部代码所访问。 全局作用域 全局作用域是在所有函数的外部声明变量的作用域。在全局作用…

    JavaScript 2023年5月28日
    00
  • JavaScript 数组常见操作技巧 (二)

    下文将为您详细讲解“JavaScript 数组常见操作技巧 (二)”的完整攻略。 一、Array.prototype.map() map()方法将数组中的每个元素映射为一个新的元素,最终返回一个映射后的新数组,并不会影响原数组的元素。该方法接收一个回调函数作为参数,回调函数接受三个参数(当前元素的值,当前元素的索引和原数组),并返回一个新值。 下面是一个示例…

    JavaScript 2023年6月10日
    00
  • 详解ES6实现类的私有变量的几种写法

    当我们在使用面向对象程序设计时,往往需要实现类的私有变量,以限制对变量的直接访问,防止出现意外修改。ES6中,有多种方式可以实现类的私有变量。 一种常见的方式是使用Symbol实现,具体实现方法如下: 首先定义一个Symbol类型的变量,在模块或类的顶层定义,确保其唯一性,比如: const _privateVariable = Symbol(‘privat…

    JavaScript 2023年6月10日
    00
  • JS 实现获取验证码 倒计时功能

    获取验证码倒计时功能在网页中使用得非常广泛,下面我将介绍JS如何实现这个功能,主要分为两个步骤:发送验证码请求和倒计时显示。 发送验证码请求 一般情况下,获取验证码的请求会发送给后端,后端会去生成验证码并发送给前端。前端只要在发送请求时携带相应的参数即可,下面是一个使用AJAX发送验证码请求的示例: // 获取验证码按钮点击事件 $(‘#get-verify…

    JavaScript 2023年6月11日
    00
  • 在vs2010中调试javascript代码方法

    在VS2010中调试JavaScript代码,需要注意以下几个步骤: 1. 确认浏览器设置 在VS2010中调试JavaScript代码,需要使用Internet Explorer浏览器。因此,需要先确认IE浏览器的设置是否正确。 打开IE浏览器,选择菜单栏-工具-Internet选项。 在Internet选项窗口中,点击“高级”选项卡。 确认“禁用脚本调试…

    JavaScript 2023年6月11日
    00
  • javascript中判断一个值是否在数组中并没有直接使用

    要判断一个值是否在 JavaScript 数组中,一般可以使用 indexOf() 方法或 includes() 方法。 但是,有时候我们需要判断一个值是否在数组中,但又不想使用这两个方法。这时,我们可以使用其它方式来实现。 一种常见的方式是使用 for 循环,遍历整个数组,比较每个元素是否等于目标值。如果找到目标值,返回 true,否则返回 false。 …

    JavaScript 2023年5月27日
    00
  • js判断浏览器类型,版本的代码(附多个实例代码)

    当我们开发web应用程序时,我们常常需要检测用户的浏览器类型和版本,以确保网站的功能在不同浏览器上的兼容性。以下是检测浏览器类型,版本的Javascript代码的攻略。 一、通过userAgent检测 Javascript可以通过navigator.userAgent来获取浏览器的用户代理字符串,然后从中提取浏览器类型和版本号。 let userAgent …

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