Javascript中的prototype与继承

JavaScript的原型(prototype)是一种机制,它允许对象继承另一个对象的属性和方法。在这种机制下,对象可以通过其原型链访问到其他对象的属性和方法。在本篇文章中,我们将探讨 JavaScript 中的 prototype 和继承。

原型(prototype)

每个Javascript对象(除了null和undefined)都有一个内部的属性[[Prototype]](也称为 .__proto__),它继承于该对象的原型对象(prototype object)。我们可以通过Object.getPrototypeOf()方法或通过. __proto__操作符获取一个对象的原型。

1.如何给对象添加原型属性

当我们创建一个新对象时,会自动创建一个原型对象,这个原型对象包含了可继承的属性和方法。我们可以使用Object.create()方法来创建一个新对象并将其原型设置为另一个对象的原型对象。

const person = {
  name: '张三',
  age: 18
};

const student = Object.create(person);
student.grade = '大一';
console.log(student.name); // 张三
console.log(student.age); // 18
console.log(student.grade); // 大一

2.如何给构造函数添加原型属性

每个 JavaScript 函数都有一个prototype属性,它指向该函数的原型对象。当我们通过 new 操作符创建一个实例时,JavaScript 将使用构造函数的原型对象创建实例对象。通过构造函数原型对象添加属性,可以实现该构造函数的所有实例的公共属性和方法。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.printName = function() {
  console.log(`我的名字是${this.name}`);
}

Person.prototype.printAge = function() {
  console.log(`我今年${this.age}岁了`);
}

const tom = new Person('Tom', 21);
tom.printName(); // 我的名字是Tom
tom.printAge(); // 我今年21岁了

继承

使用原型来继承属性和方法的对象叫做原型继承。JavaScript 中的继承基于原型链,只要我们在原型链上定义属性和方法,就可以实现继承。

3.如何实现原型继承

我们已经知道了如何在原型上定义属性和方法并访问它们,接下来我们将看看如何使用这个特性来实现原型继承。

const animal = {
  species: 'animal',
  makeSound() {
    console.log('Make Sound');
  }
}

const cat = Object.create(animal);
cat.name = 'Tom';
cat.species = 'cat';

cat.makeSound(); // Make Sound
console.log(cat.name); // Tom
console.log(cat.species); // cat

以上代码可以创建一个 cat 对象,该对象继承自 animal 原型对象。当我们调用 cat 对象的 makeSound() 方法时,它将在 animal 对象的原型对象中查找该方法并执行它。

4.如何实现构造函数继承

构造函数继承是使用父构造函数将属性和方法赋予给子构造函数的一种继承方式。子类使用父类的构造函数来创建自己的实例,并且在实例化的过程中,子类的所有属性和方法都将从父类继承。

function Animal(name) {
  this.name = name;
  this.makeSound = function() {
    console.log('Make Sound');
  }
}

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

const tom = new Cat('Tom');
console.log(tom.name); // Tom
tom.makeSound(); // Make Sound

以上代码实现了一个名为 Cat 的构造函数,并继承了 Animal 的属性和方法。可以看到,在子类 Cat 中没有定义任何属性或方法,而 Cat 对象使用了父类Animal的构造函数来创建实例,并继承了 makeSound() 和 name 属性。

5.如何实现通过构造函数和原型的方式继承

JavaScript 中的继承通常使用原型链和构造函数技术来实现。下面,我们将展示使用构造函数和原型继承方式进行对象创建和继承。

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

Animal.prototype.makeSound = function() {
  console.log('Make Sound');
}

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

Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Cat;

const tom = new Cat('Tom');
console.log(tom.name); // Tom
tom.makeSound(); // Make Sound

以上代码通过 Animal 原型对象实现了 name 和 makeSound() 的属性和方法定义,之后我们通过 Cat 的构造函数继承了父类 Animal 的属性和方法。同时,我们将 Cat 对象的原型设置为 Animal 对象的原型,并且在子类 Cat 的原型对象中定义了自己的方法和属性,如上述示例中,tom对象的name和makeSound方法及属性均是通过通过构造函数和原型的方式实现的。

综上所述,我们已经学习了 JavaScript 的 prototype 和继承机制,我们可以创建一个新的对象并将其原型设置为另一个对象的原型,同时,我们也可以使用构造函数和原型来继承父类的属性和方法。这将有助于我们构建功能更强大和复杂的应用程序。

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

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

相关文章

  • 统一接口:为FireFox添加IE的方法和属性的js代码

    为Firefox浏览器添加IE的方法和属性的js代码,需要使用jQuery以及XMLHttpRequest对象来实现。 以下是添加IE方法的代码: // 为IE的String对象添加contains方法 if (!String.prototype.contains) { String.prototype.contains = function(str, st…

    JavaScript 2023年6月10日
    00
  • js父窗口关闭时子窗口随之关闭完美解决方案

    JS父窗口关闭时子窗口随之关闭是Web开发中常见的问题,很多网站都面临这个问题。这是因为子窗口的生命周期比父窗口短,如果不及时关闭,就会在用户离开页面后继续执行任务,可能会导致程序报错或耗费过多的资源。下面是一个完美解决方案的攻略。 1. 使用 window.onbeforeunload 事件 当父窗口即将关闭(例如用户点击关闭按钮时),window.onb…

    JavaScript 2023年6月10日
    00
  • JavaScript中的splice方法用法详解

    当我们需要对数组进行插入、删除、替换操作时,可以使用JavaScript中的 splice() 方法。下面详细讲解一下splice方法的用法: 语法 array.splice(index,howmany,item1,…..,itemX) 参数说明 index:起始位置,从哪个位置开始修改数组。必须是数字,可以是 0 或任何正整数或负整数。如果为负数,则表…

    JavaScript 2023年5月27日
    00
  • webgl 系列 —— 着色器语言

    其他章节请看: webgl 系列 着色器语言 本篇开始学习着色器语言 —— GLSL全称是 Graphics Library Shader Language (图形库着色器语言) GLSL 是一门独立的语言,和其他语言一样有自己的变量、运算符、函数、循环(for)、控制语句(if)、函数、数组等等。 GLSL 比较简单。其专门用于编写着色器,舍弃了许多编程语…

    JavaScript 2023年4月18日
    00
  • C#如何使用Bogus创建模拟数据示例代码

    C#是一种广泛应用于Web开发和Windows桌面应用程序的编程语言。Bogus是一个数据生成库,允许开发人员使用此库来创建虚假数据,用于测试和其他目的。本文将详细介绍如何使用Bogus来创建模拟数据,并提供示例代码。 安装Bogus库 首先,我们需要通过NuGet包管理器安装Bogus库。打开Visual Studio,在解决方案资源管理器中右键单击项目并…

    JavaScript 2023年5月28日
    00
  • Javascript之String对象详解

    Javascript之String对象详解 String对象简介 String对象是Javascript中的基本对象之一,用来表示字符串类型。在Javascript程序中,经常需要对字符串进行各种处理,使用String对象提供的方法便可轻松实现。 String对象的创建 可以使用字面量、字符串构造函数或toString()函数来创建String对象。 var…

    JavaScript 2023年6月10日
    00
  • 从零开始学习Node.js系列教程四:多页面实现的数学运算示例

    以下是“从零开始学习Node.js系列教程四:多页面实现的数学运算示例”的完整攻略: 第一部分:前置准备 在开始学习本教程前,请确保您已经具备以下知识和软件环境: 熟练掌握HTML、CSS和JavaScript等前端技术 熟练掌握Node.js开发环境和npm包管理工具 了解Node.js的http模块和路由(Route)的基本用法 第二部分:项目结构 首先…

    JavaScript 2023年5月28日
    00
  • 如何实现修改密码时密码框显示保存到cookie的密码

    实现修改密码时密码框显示保存到cookie的密码,可以按照以下步骤进行: 绑定修改密码的button或form的submit事件,通过JavaScript获取用户输入的新密码,然后将密码存储到cookie中。 示例代码: // 获取用户输入的新密码 const newPassword = document.getElementById(‘newPasswor…

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