JavaScript 面试题
目录

JavaScript 中什么是原型 (Prototype)?

· 约 3 分钟读完 · 第 373 / 507 章

推荐答案

在 JavaScript 中,原型(Prototype) 是每个对象都拥有的一个内部属性,它指向另一个对象。原型对象包含了可以由该对象实例共享的属性和方法。通过原型链,对象可以继承其原型对象的属性和方法。

本题详细解读

1. 原型的概念

JavaScript 是一种基于原型的语言,这意味着对象可以直接从其他对象继承属性和方法,而不需要通过类(尽管 ES6 引入了类的语法糖)。每个对象都有一个内部属性 [[Prototype]],通常通过 __proto__ 属性来访问(尽管这不是标准的方式,现代 JavaScript 推荐使用 Object.getPrototypeOf() 和 Object.setPrototypeOf())。

2. 原型链

原型链是 JavaScript 实现继承的机制。当你试图访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 引擎会沿着原型链向上查找,直到找到该属性或方法,或者到达原型链的顶端(即 null)。

3. 构造函数与原型

在 JavaScript 中,构造函数通常用于创建对象实例。每个构造函数都有一个 prototype 属性,这个属性指向一个对象,该对象就是通过该构造函数创建的所有实例的原型对象。通过这种方式,所有实例可以共享原型对象上的属性和方法。

在这个例子中,Person.prototype 是所有 Person 实例的原型对象,greet 方法被定义在原型上,因此所有 Person 实例都可以访问这个方法。

4. 原型继承

通过原型链,JavaScript 实现了继承。子类可以通过将父类的实例作为其原型来实现继承。

在这个例子中,Student 继承了 Person 的属性和方法,并且可以在 Student 的原型上添加新的方法或覆盖父类的方法。

5. 原型与性能

由于原型链的存在,JavaScript 对象的属性和方法查找可能会涉及多层原型链的遍历,这可能会影响性能。因此,在设计对象时,应尽量避免过深的原型链。

6. 总结

原型是 JavaScript 中实现对象继承和共享属性和方法的核心机制。理解原型和原型链对于掌握 JavaScript 的面向对象编程至关重要。