返回
搞透JS原型链,面试不再慌
前端
2024-01-30 08:33:32
众所周知,原型链是 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 至关重要,尤其是面试时。本文通过浅显易懂的方式,帮助你彻底搞透原型链,从此面试不再慌张。