学习 JavaScript 或面试时,原型通常是一个令许多人害怕的概念。理解「proto」、「prototype」、「_proto__」等中英文名词已经让人感到困惑,但这却是面试中的高频题目。本文将带领读者了解这些概念,并整理出面试的经典题目与回答方法。
问题一:原型 (prototype) 是什么 ?
在 JavaScript 中,每个物件都包含了一个[[Prototype]]
内部隐藏属性,这个属性对应到的就是该物件的原型 (prototype),值有可能是null
或是指向另一个物件。但因为 [[Prototype]]
为内部属性并无法直接被访问到,所以浏览器提供了__proto__
的访问方法,可参考下方代码。
但要注意, __proto__
方法并不在 ECMAScript 规范中,实际上开发要取得物件的原型会使用 Object.getPrototypeOf
。
// Person 是一个构造函式
function Person() {}
// 透过 Person 构造函式,创建了一个 personA 对象
const personA = new Person();
// 透过 __proto__ 方式,查看 personA 的原型
console.log(personA.__proto__); // {constructor: ƒ}
// personA 物件可以透过 __proto__ 方法访问到它的原型
personA.__proto__ === Person.prototype; // true
Object.getPrototypeOf(personA) ==