前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >彻底理解js的原型

彻底理解js的原型

作者头像
Rosen9420
发布于 2025-01-04 08:06:33
发布于 2025-01-04 08:06:33
1040
举报
概述
什么是原型?原型(prototype)是函数创建的时候默认自带的。只要创建函数,他就默认存在。要理解原型,还要知道,我们所有对象最终都是都是继承自Object的。通过构造函数创建的对象也有一个原型(__proto__),即构造函数的原型(这里指Person.prototype)指针。简单的说就是person1只有__proto__,没有prototype。通过new 创建的对象和构造函数是没有关系

什么是原型?

原型(prototype)是函数创建的时候默认自带的。只要创建函数,他就默认存在。

要理解原型,还要知道,我们所有对象最终都是都是继承自Object的。

通过构造函数创建的对象也有一个原型(__proto__),即构造函数的原型(这里指Person.prototype)指针。简单的说就是person1只有__proto__,没有prototype。

通过new 创建的对象和构造函数是没有关系的,跟构造函数的原型有关系,即person1.__proto__ === Person.prototype

搞清楚对象、构造函数他们原型的是什么,其他就更好理解了。

我们在理解new创建对象的过程发生了什么,可以加深理解他们的关系:

一共5步:

(1) 在内存中创建一个新对象。

(2) 这个新对象内部的[[Prototype]]特性被赋值为构造函数的 prototype 属性。

(3) 构造函数内部的 this 被赋值为这个新对象(即 this 指向新对象)。

(4) 执行构造函数内部的代码(给新对象添加属性)。

(5) 如果构造函数返回非空对象,则返回该对象;否则,返回刚创建的新对象。

理解原型链:

首先,我们要知道原型链有什么作用,它的作用就是共享属性和方法。

当一个对象访问属性或方法时,首先会在自身上寻找,找不到就会往对象原型上寻找,层层往上寻找的过程就是我们所说的原型链。

如图name是构造函数Person的定义的属性,age是对person1定义的,sex则是构造函数原型定义的。

理解原型,理解下面的关系是很有必要的;

console.log(Person.prototype.__proto__ === Object.prototype); // true

console.log(Person.prototype.__proto__.constructor === Object); // true

console.log(Person.prototype.__proto__.__proto__ === null); // true

结束

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档