返回

通俗理解构造函数与原型:跳出代码看本质,思维上搞明白两者差异

前端

构造函数:对象的蓝图

我们可以将构造函数理解为一个工厂,它负责创建对象。工厂里的工人按照图纸制造产品,而构造函数则是用来制造对象的图纸。换句话说,构造函数定义了对象的结构和行为。

例如,我们定义了一个名为 Person 的构造函数:

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

使用 Person 构造函数可以创建 Person 对象:

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

这样,我们就创建了两个 Person 对象:person1person2。这两个对象都具有相同的结构和行为,因为它们都是使用同一个构造函数创建的。

原型:共享属性和方法的仓库

原型是一个特殊的对象,它包含了所有对象共享的属性和方法。当我们使用 new 创建对象时,JavaScript 会自动在该对象中创建一个指向原型的指针。

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};

现在,所有 Person 对象都可以访问 greet 方法:

person1.greet(); // Hello, my name is John and I am 30 years old.
person2.greet(); // Hello, my name is Mary and I am 25 years old.

构造函数和原型的区别

  • 构造函数用于创建对象,而原型则包含了对象共享的属性和方法。
  • 构造函数是对象的工厂,而原型是对象的仓库。
  • 构造函数通过 new 关键字调用,而原型则通过 prototype 属性访问。

构造函数和原型的关系

构造函数和原型之间存在着一种继承关系。当我们使用 new 关键字创建对象时,JavaScript 会自动在该对象中创建一个指向原型的指针。因此,对象可以访问原型中的所有属性和方法。

console.log(person1.__proto__ === Person.prototype); // true
console.log(person2.__proto__ === Person.prototype); // true

结论

构造函数和原型是 JavaScript 面向对象编程中至关重要的两个概念。理解这两个概念对于编写出健壮和可维护的代码至关重要。