JavaScript 原型与原型链详解
一、原型(Prototype)
1. 基本概念
- 每个 JavaScript 对象(除
null
外)都有一个隐藏的[[Prototype]]
属性(可通过__proto__
或Object.getPrototypeOf()
访问),指向其原型对象。 - 构造函数通过
prototype
属性为实例提供共享方法和属性。
2. 核心特性
- 共享性:原型对象的属性和方法可被所有实例共享。
- 动态性:修改原型会立即影响所有实例。
示例:
function Person(name) {
this.name = name;
}
// 方法定义在原型上
Person.prototype.sayHello = function() {
console.log(`Hello, ${
this.name}!`);
};
const alice = new Person("Alice");
alice.sayHello(); // 输出: Hello, Alice!
二、原型链(Prototype Chain)
1. 查找机制
- 访问对象属性时,JavaScript 会按以下顺序查找:
- 对象自身属性
- 对象的原型(
__proto__
) - 原型的原型(直到
Object.prototype
) - 最终返回
undefined
(若未找到)
2. 继承实现
通过原型链可实现多层继承:
function Animal(name) {
this.name = name