返回
通俗理解构造函数与原型:跳出代码看本质,思维上搞明白两者差异
前端
2023-10-28 05:50:25
构造函数:对象的蓝图
我们可以将构造函数理解为一个工厂,它负责创建对象。工厂里的工人按照图纸制造产品,而构造函数则是用来制造对象的图纸。换句话说,构造函数定义了对象的结构和行为。
例如,我们定义了一个名为 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
对象:person1
和 person2
。这两个对象都具有相同的结构和行为,因为它们都是使用同一个构造函数创建的。
原型:共享属性和方法的仓库
原型是一个特殊的对象,它包含了所有对象共享的属性和方法。当我们使用 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 面向对象编程中至关重要的两个概念。理解这两个概念对于编写出健壮和可维护的代码至关重要。