在 JavaScript 中,prototype
是一个非常重要的概念,它构成了 JavaScript 原型继承的基础。以下是关于 prototype
属性的详细解释:
prototype 是一个对象:每个函数都有一个 prototype
属性,它指向一个对象。
构造函数与 prototype:当函数作为构造函数使用时(通过 new
调用),新创建的对象会继承构造函数的 prototype
属性。
function Person(name) {
this.name = name;
}
// 给 Person 的 prototype 添加方法
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}`);
};
const person1 = new Person('Alice');
person1.sayHello(); // 输出: Hello, my name is Alice
原型链:当访问对象的属性时,JavaScript 会先查找对象本身,如果没有则查找其 prototype
,依此类推直到 Object.prototype
。
constructor 属性:默认情况下,prototype
对象有一个 constructor
属性指向函数本身。
Person.prototype.constructor === Person; // true
实例继承:所有实例共享同一个 prototype
对象上的属性和方法。
__proto__
的区别prototype
是函数对象的属性__proto__
是实例对象的属性,指向其构造函数的 prototype
person1.__proto__ === Person.prototype; // true
虽然可以直接使用 prototype
,但现代 JavaScript 提供了更简洁的类语法:
class Person {
constructor(name) {
this.name = name;
}
sayHello() {
console.log(`Hello, my name is ${this.name}`);
}
}
prototype
会影响所有已创建和将要创建的实例prototype
对象,这会破坏 constructor
的引用prototype
是 Object.prototype
理解 prototype
是掌握 JavaScript 面向对象编程的关键,它构成了 JavaScript 继承机制的基础。