返回
解密 JavaScript 中的原型和 __proto__:探索对象继承的奥秘
前端
2024-01-28 03:37:53
1. 对象与 Object 的区分
- JavaScript 中,object 是一种数据类型,八大数据类型之一,如数组、函数、日期、正则表达式等都属于 object 类型。
- Object 则是一个构造函数,由 Function 定义。
2. prototype 属性
- 每个 JavaScript 函数(包括构造函数)都有一个 prototype 属性。prototype 属性指向一个对象,该对象包含该函数的所有属性和方法。
- 当使用 new 运算符调用构造函数时,新创建的对象的 proto 属性将被设置为构造函数的 prototype 属性。
3. proto 属性
- JavaScript 中的每个对象都有一个 proto 属性,指向另一个对象。这个对象包含了该对象的所有属性和方法。
- proto 属性可以被用来访问和修改对象的属性和方法。
4. 原型链
- JavaScript 中的对象形成一个原型链,每个对象都指向其原型对象的 proto 属性。
- 当访问对象的属性或方法时,JavaScript 会沿着原型链向上查找,直到找到该属性或方法。
5. 对象继承
- JavaScript 中的对象继承是通过原型链实现的。子对象可以通过 proto 属性访问父对象的所有属性和方法。
- 子对象也可以通过修改自己的 proto 属性来继承另一个对象的属性和方法。
6. 示例
// 定义一个构造函数
function Person(name) {
this.name = name;
}
// 为构造函数添加原型属性
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name}`);
};
// 创建一个新对象
const person1 = new Person('John Doe');
// 访问原型属性
person1.greet(); // 输出:Hello, my name is John Doe
7. 总结
- prototype 和 proto 是 JavaScript 中面向对象编程的重要概念。
- prototype 是构造函数的属性,指向一个包含该函数所有属性和方法的对象。
- proto 是对象的属性,指向另一个对象。
- 原型链是 JavaScript 中的对象继承机制,每个对象都指向其原型对象的 proto 属性。
- 子对象可以通过 proto 属性访问父对象的所有属性和方法。