图解JS原型和原型链实现原理

yizhihongxing

图解JS原型和原型链实现原理

1. 什么是原型

原型是 JavaScript 中一种特殊的对象,对象具有指向其他对象的链接,这个链接被称为 prototype,也就是对象原型。

2. 原型链

原型链是多个对象通过 prototype 属性连接起来的链式结构,在 JavaScript 中,对象可以通过 proto 属性访问到它的原型,而原型本身也可以有自己的原型,形成一条链,这就是原型链。

3. 构造函数

JavaScript 中每个对象都有一个构造函数属性,它指向它的构造函数,构造函数是用来创建对象的函数。

4. 创建对象方式

4.1 字面量方式

var obj = { a: 1 }

通过字面量方式创建对象时,会自动创建一个原型对象。

4.2 构造函数方式

function Person(name) {
  this.name = name;
}
var person = new Person('Bob');

通过构造函数方式创建对象时,会自动创建一个原型,并将该原型赋给对象的 proto 属性。

5. 实现原型链

除了对象本身可以有原型之外,构造函数也可以有原型,通过 constructor 属性可以访问到构造函数,constructor 可以访问到构造函数的原型对象,也就是实现了构造函数和原型对象的互相引用。

function Person(name) {
  this.name = name;
}
Person.prototype.sayHello = function() {
  console.log('Hello, my name is ' + this.name);
}
function Student(name, score) {
  Person.call(this, name);
  this.score = score;
}
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.sayScore = function() {
  console.log('My score is ' + this.score);
}

var student = new Student('Alice', 90);
student.sayHello(); // 'Hello, my name is Alice'
student.sayScore(); // 'My score is 90'

在上面的例子中,我们定义了两个构造函数,Person 和 Student,Student 继承自 Person,通过 Student.prototype = Object.create(Person.prototype) 来实现原型的继承。此时 Student 的原型是 Person 的实例,而 Person 的原型是 Object 的实例。这样构成了一个原型链,实现了属性和方法的继承。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:图解JS原型和原型链实现原理 - Python技术站

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

相关文章

  • VUE递归树形实现多级列表

    下面是“VUE递归树形实现多级列表”的完整攻略。 1. 理解递归树形结构 递归树形结构,是指一个树形结构中包含了许多子树,而每个子树中又可能包含有更多的子树,这样的结构就可以使用递归来描述。 2. 实现递归组件 在 Vue 中实现递归树形结构,需要定义一个递归组件。递归组件是指在组件的模板中再次使用相同的组件,从而形成递归结构。 假设我们要实现一个无限级列表…

    other 2023年6月27日
    00
  • JavaScript声明变量的这四兄弟(var、let、function、const)

    JavaScript声明变量的这四兄弟(var、let、function、const)攻略 在JavaScript中,我们有四种方式来声明变量:var、let、function和const。每种方式都有其特定的用途和作用域规则。下面将详细介绍这四种声明变量的方式。 1. var var是在ES5中引入的声明变量的关键字。它具有以下特点: var声明的变量具有…

    other 2023年8月17日
    00
  • web.py获取上传文件名的正确方法

    获取上传文件名是Web应用中常见的需求之一,Web.py是一款高效的Python Web框架,能够快速构建Web应用。本文将介绍如何使用Web.py获取上传文件名的正确方法,以便开发者能够在自己的Web应用中使用。 获取上传文件名方法 获取上传文件名的方法主要取决于Web应用的处理方式。一般情况下,Web.py使用一组名称和表单元素值的字典来获取上传的文件。…

    other 2023年6月26日
    00
  • executescalar方法

    当然,我很乐意为您提供有关ExecuteScalar方法的完整攻略。以下是详细的步骤和两个示例: 1. 什么是ExecuteScalar方法? ExecuteScalar方法是ADO.NET中的一个方法,用于执行SQL查询并返回结果集中的第一行第一列的值。ExecuteScalar方法通常用于执行聚合函数(例如SUM、COUNT、AVG等)或返回单个值的查询…

    other 2023年5月6日
    00
  • Ubuntu16.04搭建NFS 文件共享服务器的方法

    安装NFS服务 首先,使用以下命令安装nfs-kernel-server sudo apt-get install nfs-kernel-server 创建共享目录 接下来,创建一个目录,并将其用于共享。下面是一个示例: sudo mkdir /home/share sudo chmod 777 /home/share sudo chown nobody:n…

    other 2023年6月27日
    00
  • C++中strlen函数的三种实现方法

    C++中strlen函数的三种实现方法 简介 strlen函数是C和C++中常见的字符串操作函数,用于计算字符串的长度。在C++中,strlen函数有三种实现方法,分别是使用指针、循环和递归。本文将详细说明这三种方法的实现过程和优缺点,帮助读者更好地理解C++中的strlen函数。 方法一:使用指针 使用指针的方式实现strlen函数比较简单,可以通过指针的…

    other 2023年6月27日
    00
  • SQL Serever学习15——进阶

    SQL Server学习15——进阶 在SQL Server学习的进程中,我们已经学会了如何创建数据库、表以及基础的增删改查操作。但是,在现实开发中还有很多复杂的操作需要面对。在本篇文章中,我们将介绍一些进阶的SQL Server操作。 索引 索引是提高查询效率的重要机制。在数据库中创建索引可以让搜索数据变得更加快速和高效。创建索引的方法很简单,只需在需要创…

    其他 2023年3月28日
    00
  • win10telentvmware安装的centos79092端口不通

    以下是“win10telentvmware安装的centos7 9092端口不通”的完整攻略: 1. 确认端口是否开放 首先,我们需要确认端口是否开放。可以使用命令: sudo firewall-cmd –list-ports 如果端口在列表中,则需要将其添加到防火墙规中。可以以下命令: sudo firewall-cmd –add-port=9092/…

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