返回

深入剖析JS核心知识点——原型之谜

前端

原型对象——共享属性和方法的容器

原型对象是一个特殊的对象,包含了可由特定类型的所有实例共享的属性和方法。它充当了类型模板的角色,为每个实例提供了一组共同的特性。

原型对象也是一个普通的对象,拥有自己的构造函数,而这个构造函数的原型又指向它的原型对象,以此类推,形成了原型链。

构造函数的原型——原型的来源

构造函数是用于创建对象的函数,每个构造函数都有一个prototype属性,指向该构造函数的原型对象。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

// Person.prototype是Person构造函数的原型对象
console.log(Person.prototype);

原型链——层层相连的原型对象

原型链是指从某个对象沿着__proto__属性向上追溯到Object.prototype对象的连接路径。

const person1 = new Person('John', 25);

// person1.__proto__指向Person.prototype
console.log(person1.__proto__);

// Person.prototype.__proto__指向Object.prototype
console.log(Person.prototype.__proto__);

// Object.prototype.__proto__为null,原型链结束
console.log(Object.prototype.__proto__);

原型继承——共享特性的便捷方式

原型继承是指子类型继承父类型的原型对象,从而获得父类型的所有属性和方法。

function Student(name, age, grade) {
  // 调用Person构造函数
  Person.call(this, name, age);

  this.grade = grade;
}

// Student.prototype.__proto__指向Person.prototype
console.log(Student.prototype.__proto__);

// 创建Student实例
const student1 = new Student('Mary', 20, 'A');

// student1.__proto__指向Student.prototype
console.log(student1.__proto__);

// 访问父类型的属性和方法
console.log(student1.name); // Mary
console.log(student1.age); // 20
console.log(student1.grade); // A

总结

原型是JavaScript中一种强大的机制,它允许对象共享属性和方法,简化了代码并提高了复用性。

通过深入理解原型对象、构造函数的原型、原型链和原型继承,您可以更加熟练地驾驭JavaScript,编写出更优雅、更具可维护性的代码。