返回

搞透JS原型链,面试不再慌

前端

众所周知,原型链是 JS 中考察基础的一大难点,虽工作开发中用处不大,但掌握此知识却能深入理解 JS 框架设计、源码阅读,尤其面试时更是常考点。所以,本文将彻底剖析 JS 原型链,助你面试过关斩将。

原型链的基本概念

原型链是 JS 中的一种机制,它通过内部链接将对象连接起来,从而形成一条从子对象指向父对象的链条。当某个对象调用不存在的方法或属性时,JS 引擎会自动沿着原型链向上查找,直到找到该方法或属性,或到达原型链的尽头(即 Object.prototype)。

原型链的创建和继承

原型链的创建是在创建新对象时进行的,通常是通过构造函数或字面量语法。在构造函数中,通过 prototype 属性将父原型赋予子构造函数,从而建立原型链;在字面量语法中,通过 __proto__ 属性实现相同的效果。

例如:

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}`);
};

const person = new Person('John');
person.greet(); // Hello, my name is John

方法查找的过程

当一个对象调用不存在的方法时,JS 引擎会沿着原型链向上查找,直到找到该方法或到达原型链的尽头。这一过程称为方法查找。

修改原型链

我们可以修改原型链,从而改变对象的行为。通过修改 prototype 属性,可以向现有构造函数添加新方法或属性,从而影响所有该构造函数创建的对象。

例如:

Person.prototype.age = 25;
person.age; // 25

原型链的限制

原型链虽然强大,但也有一些限制:

  • 只能沿着一条链向上查找: 如果一个对象有多个原型,JS 引擎只能沿着一条链查找,可能无法找到所需的方法或属性。
  • 修改原型链会影响所有对象: 修改 prototype 属性将影响所有该构造函数创建的对象,可能会产生意外的后果。
  • 性能问题: 原型链的查找过程可能会导致性能问题,尤其是在处理大型对象时。

结论

掌握 JS 原型链的知识对于深入理解 JS 至关重要,尤其是面试时。本文通过浅显易懂的方式,帮助你彻底搞透原型链,从此面试不再慌张。