JavaScript原型链是对象属性查找的单向向上路径,由实例的__proto__指向构造函数的prototype构成,终点为Object.prototype.__proto__ === null。

JavaScript 原型是每个函数(包括构造函数)自动拥有的一个对象,叫 prototype;而每个由该函数创建的实例对象,内部都有一个隐式链接(非标准但普遍支持的 __proto__),指向其构造函数的 prototype。这个链接关系层层向上延伸,就构成了原型链——它是 JavaScript 实现继承和属性查找的核心机制。
原型对象(prototype)是构造函数的“共享属性仓库”
当你定义一个函数,比如 function Person(name) { this.name = name; },JS 引擎会自动为它添加一个 Person.prototype 对象。你可以在上面挂载方法或属性,所有通过 new Person() 创建的实例都能访问到它们,且不重复占用内存。
Person.prototype.sayHello = function() { console.log('Hi, ' + this.name); }; const p1 = new Person('Alice'); 和 const p2 = new Person('Bob'); 都能调用 p1.sayHello(),因为它们的 __proto__ 指向 Person.prototype 注意:prototype 只属于函数,普通对象(如 {})没有 prototype 属性,但有 __proto__
__proto__ 是实例对象通往原型的“隐式通道”
每个对象(除 null)都有一个内部属性 [[Prototype]],在大多数引擎中可通过 __proto__ 访问。它决定了当读取一个属性时,如果对象自身没有,就会沿着它往上找——先查 __proto__ 指向的对象,再查那个对象的 __proto__,直到为 null 为止。
const obj = {}; → obj.__proto__ === Object.prototype Object.prototype.__proto__ === null,这是原型链的终点 数组 [1,2] 的 __proto__ 指向 Array.prototype,而 Array.prototype.__proto__ 又指向 Object.prototype
原型链的本质是属性查找路径,不是类式继承
JavaScript 没有“类继承”的底层机制,只有对象间委托(delegation)。所谓“继承”,其实是子对象通过 __proto__ 委托父对象处理属性和方法调用。ES6 的 class 只是语法糖,背后仍是原型链。
立即学习“Java免费学习笔记(深入)”;
用 Object.create(Parent.prototype) 手动设置子构造函数的原型,可实现继承 现代写法推荐使用 extends 和 super(),但执行时仍会把子类实例的 __proto__ 连到父类原型上 判断关系用 instanceof(检查原型链中是否包含某构造函数的 prototype)或 isPrototypeOf()
理解原型链的关键:区分三个容易混淆的东西
初学者常混淆 prototype、__proto__ 和 constructor。记住:
F.prototype:仅函数有,是被实例的 __proto__ 指向的对象 obj.__proto__:任何对象都有,是它查找属性时的上一级原型 F.prototype.constructor === F:默认指向原函数,可被改写,不影响原型链本身 真正起作用的是 __proto__ 的指向关系,constructor 只是个参考属性,不参与查找
原型链不是黑箱,它是一条清晰的、单向的、向上的属性访问路径。搞懂谁指向谁、什么时候触发查找、终点在哪,就能自然理解 JS 的“继承”行为。不复杂但容易忽略细节。
以上就是javascript原型是什么_如何理解原型链的继承机制?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1543982.html
微信扫一扫
支付宝扫一扫