JavaScript原型链是对象通过[[Prototype]]链接逐级向上查找属性和方法的继承机制;普通对象、数组、函数的原型最终都指向Object.prototype,其[[Prototype]]为null;构造函数的prototype指定实例原型,__proto__指向直接原型;属性查找沿__proto__链进行直至null;主流继承方式包括组合继承、寄生组合继承和ES6 class,均基于原型链实现。

JavaScript 的原型链是对象之间建立继承关系的底层机制,它不依赖类,而是靠对象内部的 [[Prototype]] 链接逐级向上查找属性和方法。继承的本质,就是让一个对象能访问另一个对象的属性与行为。
每个对象(除 null)都有一个内部属性 [[Prototype]],它指向该对象的原型对象。这个链接不是单层的,而是一串可延续的链条:
{})的 [[Prototype]] 指向 Object.prototype
Object.prototype 的 [[Prototype]] 是 null,链在此终止[])的原型是 Array.prototype,再往上连到 Object.prototype
function() {})的原型是 Function.prototype,也最终连到 Object.prototype
构造函数本身是函数对象,它有两个关键原型相关属性:
new Fn() 时,新实例的 __proto__ 会自动等于 Fn.prototype
例如:const p = new Person("Alice"),那么 p.__proto__ === Person.prototype 为真。
立即学习“Java免费学习笔记(深入)”;
当你写 p.greet(),JavaScript 引擎按如下顺序查找:
p 自身有没有 greet
p.__proto__(即 Person.prototype)里找Person.prototype.__proto__(即 Object.prototype)找null,返回 undefined
这就是“沿原型链向上查找”,也是 toString、hasOwnProperty 等通用方法对所有对象都可用的原因。
实际开发中,有几种主流继承模式,核心目标都是让子类型既能复用父类型的方法,又能拥有自己的实例数据:
Parent.call(this, ...) 继承实例属性;再用 Child.prototype = new Parent() 继承原型方法(但会调用两次父构造函数)Object.create(Parent.prototype) 设置子原型,避免重复调用父构造函数,再手动修正 constructor
class Dog extends Animal,但底层仍是基于原型链,super() 对应 Parent.call(this),extends 对应 Object.create(Parent.prototype)
无论哪种方式,最终子实例都能通过 __proto__ 链访问到父类原型上的方法,完成行为复用。
以上就是什么是javascript原型链_javascript中的继承机制如何工作的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号