JavaScript原型链是对象查找属性和方法时沿[[Prototype]]隐式链接的路径,始于对象自身,逐级向上至null;它通过构造函数的prototype属性、Object.create等实现继承,影响属性访问、instanceof判断及共享引用类型属性。

JavaScript 原型链是对象查找属性和方法时遵循的一条隐式链接路径,它决定了一个对象“能访问什么”,是 JS 实现继承的核心机制。
每个对象内部都有一个隐藏属性 [[Prototype]](可通过 Object.getPrototypeOf() 或非标准的 __proto__ 访问),它指向该对象的原型对象。而原型对象本身也可能有 [[Prototype]],这样层层向上,直到最终指向 null,就构成了原型链。
函数对象还额外拥有 prototype 属性(显式对象),它会被用作以该函数为构造器创建出的实例的 [[Prototype]]。
{} 的原型是 Object.prototype
[] 的原型是 Array.prototype,其上层是 Object.prototype
new Foo() 的原型是 Foo.prototype
当你读取一个对象的属性(如 obj.a)时,JS 引擎会按以下顺序查找:
立即学习“Java免费学习笔记(深入)”;
null
这个过程就是“委托”——对象把找不到的属性请求,委托给它的原型处理。方法调用、in 操作符、hasOwnProperty 的行为都受此影响(注意:hasOwnProperty 只查自身,不走原型链)。
JS 没有类继承的语法糖之前,所有继承都靠手动设置原型链来完成。例如:
function Animal(name) { this.name = name; }
Animal.prototype.speak = function() { console.log(this.name + ' makes a sound'); };
function Dog(name, breed) {
Animal.call(this, name); // 继承实例属性
this.breed = breed;
}
Dog.prototype = Object.create(Animal.prototype); // 关键:让 Dog.prototype 链向 Animal.prototype
Dog.prototype.constructor = Dog; // 修复 constructor 指向
const dog = new Dog('Leo', 'Golden');
dog.speak(); // → 'Leo makes a sound'(从 Animal.prototype 找到)
ES6 的 class 和 extends 只是语法糖,底层仍是通过操作原型链实现继承。
原型链虽灵活,但也容易引发误解:
instanceof 判断依赖原型链:判断左操作数的 [[Prototype]] 链中是否出现右操作数的 prototype
prototype,不能用作构造函数理解原型链不是为了手写继承代码,而是为了真正看懂 JS 对象行为、调试属性访问问题、合理使用 Object.create、Object.setPrototypeOf 等 API。
以上就是什么是javascript原型链_它如何影响对象的继承方式?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号