原型链的本质是对象内部[[Prototype]]隐式引用构成的、逐级向上直至null的链式结构。它通过属性查找机制实现继承:先查自身,再沿链向上,直到找到属性或返回undefined,从而共享方法节省内存。

JavaScript中的原型链是对象之间建立继承关系的核心机制,它让一个对象可以访问另一个对象的属性和方法。
每个JavaScript对象内部都有一个隐式引用([[Prototype]]),指向它的原型对象。这个原型对象本身也有自己的原型,层层向上,直到最终指向null——这就是原型链。你可以用Object.getPrototypeOf(obj)或obj.__proto__(不推荐)查看对象的原型。
函数对象还有prototype属性,它是一个普通对象,会被赋值给该函数创建的实例的[[Prototype]]。例如:
function Person() {} 定义后,Person.prototype 就是将来所有new Person()实例的原型const p = new Person() → p.[[Prototype]] === Person.prototype
Person.prototype.[[Prototype]] === Object.prototype → Object.prototype.[[Prototype]] === null
当访问一个对象的属性时,JavaScript引擎会按以下顺序查找:
立即学习“Java免费学习笔记(深入)”;
[[Prototype]]链向上查找,依次检查每个原型对象null)返回undefined
这使得子对象“继承”了原型上的方法和属性,无需复制,节省内存。比如:
Array.prototype.map存在于所有数组实例的原型链上,所以[1,2].map(x => x*2)能直接调用,尽管数组字面量本身没有map属性。
ES6之前常用“组合继承”或“寄生组合继承”,核心都是手动设置子类原型的[[Prototype]]指向父类原型:
Child.prototype = Object.create(Parent.prototype) —— 让Child实例的原型链能访问Parent.prototype上的方法constructor: Child.prototype.constructor = Child
class和extends本质也是基于这套原型链机制,只是语法糖注意:Object.create(null)创建的对象没有原型,其原型链只有一层null,无法继承任何内置方法(如toString)。
它只支持单向、动态的属性查找,不提供真正的“类式封装”:
#field私有字段)现代开发中,原型链仍是底层基础,但日常更多通过class、extends、super等语法使用,背后逻辑不变。
以上就是什么是JavaScript中的原型链_它如何实现继承机制?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号