窥探JS面向对象中的原型秘密
2024-01-08 16:13:27
揭开原型对象的神秘面纱
在JavaScript中,每个函数都有一个Prototype属性,指向一个对象,称为函数的Prototype对象。而所有的Prototype对象也有一个Prototype属性,它指向Function.prototype对象。因此,所有函数的Prototype对象都通过原型链与Function.prototype对象相连。
创建你的实例
JavaScript面向对象编程也是基于原型和原型链的。我们可以使用new创建一个对象的实例,该实例将拥有指向类Prototype属性的对象的内部引用。
function Person(name, age) {
this.name = name;
this.age = age;
}
const person1 = new Person('John Doe', 30);
const person2 = new Person('Jane Smith', 25);
在这个例子中,person1和person2都是Person函数的实例,它们都有一个内部引用,指向Person的Prototype对象。
探索Prototype对象
原型对象是一个普通对象,可以包含属性和方法。我们可以使用Person.prototype访问Person的Prototype对象。
console.log(Person.prototype);
输出结果:
{
constructor: ƒ Person(name, age),
__proto__: { ... }
}
constructor属性指向Person函数本身,__proto__属性指向Person的Prototype对象的原型对象。
继承和原型链
JavaScript中,继承是通过原型链来实现的。当我们创建一个新的对象时,该对象将继承其Prototype对象的属性和方法。
person1.sayHello(); // "Hello, my name is John Doe"
person2.sayHello(); // "Hello, my name is Jane Smith"
在上面的例子中,person1和person2都继承了Person.prototype.sayHello()方法,并使用它来打招呼。
修改Prototype对象
我们可以修改Prototype对象,以便向所有该Prototype对象的实例添加新的属性或方法。
Person.prototype.job = 'Software Engineer';
console.log(person1.job); // "Software Engineer"
console.log(person2.job); // "Software Engineer"
在这个例子中,我们向Person.prototype添加了一个名为job的属性,并将它设置为"Software Engineer"。现在,person1和person2都拥有了job属性,并且它的值都是"Software Engineer"。
拓展阅读
总结
原型对象是JavaScript面向对象编程的核心概念。通过理解Prototype对象和原型链,我们可以更好地理解和使用JavaScript面向对象编程。