欢迎您访问新疆栾骏商贸有限公司,公司主营电子五金轴承产品批发业务!
全国咨询热线: 400-8878-609

新闻资讯

技术学院

什么是JavaScript中的原型链?

作者:幻影之瞳2025-12-26 00:00:00
JavaScript原型链是对象继承属性和方法的核心机制,通过__proto__指向构造函数的prototype实现层级查找,最终终止于Object.prototype.__proto__为null,支持手动修改但推荐Object.create()或class extends。

JavaScript中的原型链是对象之间实现属性和方法继承的核心机制,它让一个对象可以访问另一个对象的属性和方法。

每个对象都有一个隐式原型(__proto__

当你创建一个对象(比如 const obj = {}new Date()),这个对象内部会自动关联一个原型对象,即它的 __proto__ 属性。这个属性指向该对象的构造函数的 prototype 对象。

  • obj.__proto__ === Object.prototype(普通对象)
  • [1,2].__proto__ === Array.prototype
  • /abc/.__proto__ === RegExp.prototype

函数有显式的 prototype 属性

只有函数才有 prototype 属性(箭头函数除外),它是被用来作为“原型对象模板”的——当用 new 调用该函数时,新对象的 __proto__ 就会指向这个 prototype

  • function Foo() {}Foo.prototype 是一个对象,默认有 constructor 属性
  • const f = new Foo()f.__proto__ === Foo.prototype

查找属性时会沿原型链向上搜索

当你访问一个对象的属性(如 obj.name),JS 引擎先在对象自身找;没找到,就去 obj.__proto__ 找;还没找到,就继续查 obj.__proto__.__proto__……直到到达 null(原型链终点)。

  • {}.__proto__ === Object.prototype
  • Object.prototype.__proto__ === null(链的尽头)
  • 所以所有对象最终都继承自 Object.prototype 上的方法,比如 toString()hasOwnProperty()

可以手动修改原型链(但不推荐随意操作)

虽然可以通过 Object.setPrototypeOf()__proto__ 修改原型,但会影响性能且不易追踪。更安全的方式是用 Object.create() 创建指定原型的对象,或用 ES6 的 class + extends 实现继承。

  • const child = Object.create(parent)child.__proto__ === parent
  • class B extends A {}B.prototype.__proto__ === A.prototype

基本上就这些。原型链不是黑箱,它是一条清晰、可追溯的属性查找路径,理解它才能真正掌握 JS 的面向对象本质。