原型和原型链(二)

news/2025/1/9 10:00:27/

文章目录

  • 前言
  • 一、_proto_(上文提到)
    • 1、定义:
    • 2、小测试:
  • 二、原型链
    • 1、定义及相关解释:
    • 2、原型链图:


前言

在上篇文章中对构造函数和原型对象进行了相应的总结。此文章将会对原型链进行详细的阐述。希望大家对原型和原型链的理解有较大的帮助。


一、proto(上文提到)

1、定义:

JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做_proto_的内置属性,用于指向创建它的构造函数的原型对象。
对象person1有一个_proto_属性,创建它的构造函数是Person,构造函数的原型对象是Person.prototype,所以: person1._proto_ == Person.prototype

在这里插入图片描述

注:由图片中实例,构造函数及原型对象之间有关系。但是并不是我们所看到的这样。其实,他们的连接存在于实例(person1)与构造函数(Person)的原型对象之间并不是存在于实例(person1)与构造函数(Person)之间。对于上面的话,代码做以下解释:

在这里插入图片描述

2、小测试:

(1) person1.proto;
(2)Person.proto;
(3)Person.prototype.proto;
(4)Object.proto;
(5)object.prototype_proto_;
答案:
(1)person1.proto === person1的构造函数.prototype和person1的构造函数 === Person,所有person1.proto === Person.prototype.
(2)Person.proto === Person的构造函数.prototype和Person的构造函数 === Function,所以Person.proto === Function.prototype.
(3)Person.prototype是一个普通对象,只要记住它是一个普通对象。因为一个普通对象的构造函数 === Object,所以Person.prototype.proto === object.prototype。
(4)根据第二题可知,Object和Person相似(构造函数)。
(5) object.prototype对象也有proto属性,但它比较特殊,为null。因为null处于原型链的顶端,这个只能记住。object.prototype.proto === null。

二、原型链

1、定义及相关解释:

定义:
在JavaScript中万物都是对象,对象和对象之间也有关系,并不是孤立存在的。对象之间的继承关系,在JavaScript中是通过prototype对象指向父类对象,直到指向O北京二次元对象为止,这样就形成了一个原型指向的链条。
比如说,person->Person->Object,普通人继承人类,人类继承对象类

当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,如果找到则直接使用。如果没有则去原型中寻找,直到找到Object对象的原型,Object对象的原型没有原型,如果在Object原型中仍然没有找到,则会返回undefined。

说明:Object是JavaScript中所有对象数据类型的基类(最顶层的类)在Object.prototype上没有_proto_这个属性。如下所示:

console.log(Object.prototype.__proto__ === null) // true

2、原型链图:

在这里插入图片描述


借鉴:
https://www.jianshu.com/p/a4e1e7b6f4f8(三篇)
https://www.jianshu.com/p/ddaa5179cda6


http://www.ppmy.cn/news/484827.html

相关文章

原型链的解说

首先,我们要知道,万物皆对象,一切的一切都是由对象构成的。 一、关于函数的原型对象 在JavaScript中,如果我们创建一个函数A,那么浏览器就会在内存空间里创建一个对象B,而且每个函数都会默认会有一个属性…

【js进阶】-原型/原型链

一、构造函数创建对象 我们先使用构造函数创建一个对象,先来认识下构造函数 function Person() { } var person1 new Person(); person1.name 张三; console.log(person1.name) // 张三在这个例子中,Person 就是一个构造函数,我们使用 ne…

JS原型、原型链到底是什么?

前言 在js的学习中,原型毫无疑问是一个难点,但也是一个不可忽视的重点。在前端面试中也是一个高频考题,在接下来的深入学习中,你会发现原型、原型链等知识点其实并不难。 1. “一切皆为对象” JavaScript是一个面向&#xff08…

原型及原型链 ①

文章目录 原型及原型链函数对象constructor 构造函数new 操作符将构造函数当作函数构造函数的问题prototype 原型理解原型对象更简单的原型语法原型的动态性原生对象的原型原型对象的问题构造函数和原型结合构造函数和原型结合 __proto__原型链关卡 本文转:https://…

原型原型链深度解析

原型 原型是函数特有的,构造函数制造出对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。 我们先写一个构造函数 function Person() {} var person new Person(); person.name luoxi; console.log(person.name) // luoxi在这…

原型,原型链,原型的继承

原型的作用? 1.节省内存空间 2.实现数据共享(继承) 什么是原型? 任何一个函数都有propotype属性,它本身是一个对象,我们称之为原型 构造函数,实例化对象与原型之间的关系? 1.任何一个函数都有prototype属性,它本身是一个对象,我们称之为原型 2.构造函数也是函数,也都…

原型和原型链详细讲解

目录 一、构造函数 二、原型对象 三、原型链 四、函数也是一种对象 五、总结 一、构造函数 构造函数、普通函数区别,使用new关键字创建对象的函数叫构造函数。构造函数的首字母一般是大写,用以区分普通函数。 function Person(name, age) {this.nam…

硬核!原型和原型链详解

前言 我是歌谣 知其然知其所以然 人人都有一个大厂梦 希望通过自己的一个总结分享可以给予大家带来帮助和提升。 本期知识点 原型和原型链 目标 1理解原型和原型链 2理解构造函数 3理解构造函数 原型和原型链之间的关系 引用类型都是对象 基本数据类型和引用数据类型可以看下…