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

JavaScript 原型是每个函数(包括构造函数)自动拥有的一个对象,叫 prototype;而每个由该函数创建的实例对象,内部都有一个隐式链接(非标准但普遍支持的 __proto__),指向其构造函数的 prototype。这个链接关系层层向上延伸,就构成了原型链——它是 JavaScript 实现继承和属性查找的核心机制。
当你定义一个函数,比如 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__
每个对象(除 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原型是什么_如何理解原型链的继承机制?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号