原型链是 JavaScript 实现继承和属性查找的核心机制,也是这门语言基于原型编程的基础。所有对象都自带 __proto__ 属性,指向其构造函数的 prototype 原型对象,原型对象又有自己的原型,层层向上直到 null,形成链式结构。它的核心作用:一是让对象可以共享原型上的属性和方法,避免重复创建,大幅节省内存;二是作为属性和方法的查找规则,对象自身没有的属性会沿原型链向上查找;三是支撑 JavaScript 实现继承,是所有继承方案的底层原理。
JavaScript 没有传统类继承,基于原型链实现原型继承。核心原理是:让子类的原型对象指向父类的实例或原型,子类实例就能通过原型链访问父类的属性和方法。简单来说,子类自身没有的成员,会顺着原型链找到父类原型上的成员。ES6 的 class 和 extends 只是语法糖,底层依然是原型继承。这种继承方式可以实现方法复用,但要注意父类原型上的引用类型值会被所有子类实例共享,这是原型继承的经典特点。
JavaScript 提供了多种创建对象的方式,适配不同场景。最常用的是对象字面量 {},语法最简单,适合创建单个对象;构造函数配合 new 关键字,适合创建多个具有相同属性的实例;Object.create() 方法,可以指定对象的原型,灵活实现原型继承;工厂函数,封装创建逻辑,返回对象实例;ES6 新增的 class 类,通过 new 实例化,语法更贴近传统面向对象。日常开发优先使用字面量和 class,复杂继承场景使用 Object.create()。
JavaScript 实现继承有多种方案,最优方案是寄生组合式继承,也是 ES6 extends 的底层实现。常用方式:1. 原型链继承,将子类原型指向父类实例,简单但引用类型会共享;2. 构造函数继承,用 call/apply 调用父类构造函数,解决属性共享问题,但无法继承方法;3. 组合继承,结合前两者,是早期常用方案;4. 寄生组合式继承,优化组合继承的缺陷,性能最优;5. ES6 class extends,语法简洁,是现代开发的首选方式,底层基于原型继承。
立即调用的类表达式(ILCE)是类版本的 IIFE,和立即执行函数原理一致。将类用括号包裹成表达式,末尾直接加 () 实例化,定义后立刻创建对象,无需手动调用。它属于匿名类表达式,执行后自动销毁,不会污染全局作用域。核心用途:创建一次性使用的单例类、执行临时的类初始化逻辑、隔离类的私有成员。在需要快速创建临时类实例、且无需复用类的场景中使用,是 ES6 模块化下的轻量化类使用方案。