js-理解prototype、__proto__和constructor

前言

你好呀😉✌,我是你的人类朋友!

今天给大家整理一下原型与原型链的相关知识中prototype__proto__constructor的区别!!

本文章可以帮助各位:

  • 掌握prototype__proto__constructor的指向问题

大家重点记住我标出来的几句话哦😁


内容

构造函数是什么?
js 复制代码
function Student() {
    this.name = '你的人类朋友',
    this.age = 18
}

上面就是一个构造函数,构造函数的首字母约定大写

实例对象是什么?
js 复制代码
let student = new Student()

new对应的构造函数出来的实例,就是对应构造函数的实例对象

请大家记住第一句话:每个函数都有一个 prototype 属性

上面所说的构造函数也是一个函数

也就是说每一个构造函数也有一个prototype属性咯。答案是肯定的,让我们打印看看。

js 复制代码
function Student() {
    this.name = '你的人类朋友',
    this.age = 18
}
console.log(Student.prototype) // {constructor: ƒ}

我们确实打印出东西了

请大家记住第二句话:每一个对象(除了null)都有__proto__属性

我们上面说的实例对象,不也是一个对象吗?那也就是说任何一个实例对象都会有一个属性名字叫做__proto__吗?答案是肯定的

js 复制代码
function Student() {
    this.name = '你的人类朋友',
    this.age = 18
}

let student = new Student()

console.log(student.__proto__) // {constructor: ƒ}
请大家记住第三句话:实例对象的__proto__属性指向的内容与其对应构造函数的prototype属性所指向的内容一致

我们首先用代码来验证这第三句话

js 复制代码
function Student() {
    this.name = '你的人类朋友',
    this.age = 18
}

let student = new Student()

console.log(Student.prototype === student.__proto__) // true

下面的内容帮助大家理解这一句话,大家不要被这句话吓到了!

以我们上面的Student和实例对象student为例,让我们来捋一捋:

  • Student是一个构造函数,我们知道每一个函数都会有一个prototype属性。
  • student是一个实例对象,我们知道每一个对象(除了null)都会有一个属性,属性名叫做__proto__
  • 第三句话所说的就是,Studentprototype属性指向了student__proto__属性

下面我画一张图帮助大家理解

请大家记住第四句话:constructor与prototype互逆

直接上图!!

严谨起见,我们还是使用代码验证一下:

js 复制代码
function Student() {
    this.name = '你的人类朋友',
    this.age = 18
}

console.log(Student.prototype.constructor === Student) // true

好了,现在我来总结一下上述内容,大家只要记住我强调的那四句话就好啦

  1. 每个函数都有一个prototype属性
  2. 每一个对象(除了null)都有__proto__属性
  3. 实例对象__proto__属性指向的内容与其对应构造函数prototype属性所指向的内容一致
  4. constructorprototype互逆

结语

我是你的人类朋友😉,大家可以把上面的四点记号,指向内容应该就没问题啦。

有错误提出来我会改的,尽量别骂人啊!!!😢

下次再见咯😁😁😁!!

相关推荐
WYiQIU1 天前
11月面了7.8家前端岗,兄弟们12月我先躺为敬...
前端·vue.js·react.js·面试·前端框架·飞书
谢尔登1 天前
简单聊聊webpack摇树的原理
运维·前端·webpack
娃哈哈哈哈呀1 天前
formData 传参 如何传数组
前端·javascript·vue.js
zhu_zhu_xia1 天前
vue3+vite打包出现内存溢出问题
前端·vue
tsumikistep1 天前
【前后端】接口文档与导入
前端·后端·python·硬件架构
行走的陀螺仪1 天前
.vscode 文件夹配置详解
前端·ide·vscode·编辑器·开发实践
2503_928411561 天前
11.24 Vue-组件2
前端·javascript·vue.js
Bigger1 天前
🎨 用一次就爱上的图标定制体验:CustomIcons 实战
前端·react.js·icon
谢尔登1 天前
原来Webpack在大厂中这样进行性能优化!
前端·webpack·性能优化
cypking1 天前
Vue 3 + Vite + Router + Pinia + Element Plus + Monorepo + qiankun 构建企业级中后台前端框架
前端·javascript·vue.js