返回
揭秘原型对象:prototype 和 __proto__ 的本质区别
前端
2024-02-19 19:00:20
原型对象:基础概念
在面向对象编程中,原型对象是一个特殊的对象,它为一组对象共享属性和方法。当创建一个新对象时,JavaScript 会自动创建一个与该对象关联的原型对象,并为其添加一些默认属性和方法。
构造函数的 prototype 属性
在 JavaScript 中,每个构造函数都具有一个 prototype 属性。该属性指向与该构造函数关联的原型对象。因此,我们可以通过构造函数的 prototype 属性来访问和修改原型对象。
function Person(name, age) {
this.name = name;
this.age = age;
}
// 为 Person 构造函数的 prototype 属性添加一个 sayHello 方法
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};
// 创建一个 Person 对象
const person1 = new Person('John', 30);
// 调用 Person 对象的 sayHello 方法
person1.sayHello(); // 输出: Hello, my name is John and I am 30 years old.
proto 属性
对象的 proto 属性指向其原型对象。因此,我们可以通过对象的 proto 属性来访问和修改原型对象。
const person1 = new Person('John', 30);
// 访问 Person 对象的 __proto__ 属性
console.log(person1.__proto__ === Person.prototype); // 输出: true
prototype 和 proto 的区别
虽然 prototype 和 proto 属性都与原型对象相关,但它们之间还是存在一些区别。
- prototype 是构造函数的属性,而 proto 是对象的属性。
- prototype 可以被修改,而 proto 通常是只读的。
总结
prototype 和 proto 属性都是 JavaScript 中原型对象的重要组成部分。通过理解这两个属性之间的区别,我们可以更深入地理解原型对象的运作机制,并在实际开发中更好地利用原型对象。