前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一句话读懂原型 、原型链(__proto__、prototype)

一句话读懂原型 、原型链(__proto__、prototype)

作者头像
andyhu
发布2023-05-24 09:34:13
2250
发布2023-05-24 09:34:13
举报
文章被收录于专栏:andyhu-大前端andyhu-大前端

 先属性明确几个概念

  • prototype: 原型,函数的一个属性,它本身就是一个对象 {}
  •  __proto__: 原型链,通过 __proto__ 可以把互相继承的对象的原型链接起来

 原型、原型链

__proto__ 

__proto__ 是每个对象都具有的属性,它指向该对象所继承的原型对象。 或者可以这样说: 对象的 __proto__ 指向对象的构造函数的原型对象

  • 例 1.1
代码语言:javascript
复制
function Person() {

}

let person1 = new Person();
person1.__proto__ === Person.prototype		// true

/**
 * 解释:
 * - person1 对象具有__proto__属性和 Person 构造函数。
 * - Person 函数的原型对象就是 Person.prototype
 * - 所以 person1对象的原型(person1.__proto__)指向 person1 的构造函数(Person)的原型对象(Person.prototype)
 */
prototype 是函数才有的属性,它指向该函数的原型对象(Person.prototype
原型链

MDN上的总结:每个实例对象(object)都有一个私有属性(称之为 __proto__)指向它的构造函数的原型对象(prototype)。 该原型对象也有一个自己的原型对象(__proto__),层层向上直到一个对象的原型对象为 null,通过__proto__一层一层像链条一样向上链接原型对象,我们可以称这条链为原型链。 几乎所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例

延续 例 1.1:

代码语言:javascript
复制
function Person() {

}
let person1 = new Person();

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

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

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

写在最后

我是 AndyHu,目前暂时是一枚前端搬砖工程师。

文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注呀😊

未经许可禁止转载💌

speak less,do more.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •  先属性明确几个概念
  •  原型、原型链
    • __proto__ 
      • 而 prototype 是函数才有的属性,它指向该函数的原型对象(Person.prototype)
        • 原型链
        • 写在最后
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档