返回

函数、原型、对象、构造函数,傻傻分不清楚?

前端

在面向对象编程(OOP)中,对象是现实世界实体的抽象。例如,我们可以将一只猫抽象成一个对象,这个对象具有名称、年龄、颜色等属性,以及吃、喝、睡等方法。对象是通过类(class)来创建的,类是一个对象的模板,它定义了对象具有的属性和方法。

JavaScript是一种基于原型的语言,它没有类的概念。在JavaScript中,对象是通过函数创建的。函数不仅可以执行代码,还可以返回一个对象。这个对象就是函数的实例(instance)。函数既是对象,也是创建对象的模板,因此被称为构造函数(constructor function)。

构造函数在创建对象时,会将自己的属性和方法复制到新对象上。新对象称为构造函数的实例。实例对象具有构造函数的所有属性和方法,还可能具有自己独有的属性和方法。

原型对象(prototype)是所有实例对象的共同父对象。原型对象具有所有实例对象共享的属性和方法。实例对象可以通过原型对象访问这些属性和方法。

对象、实例对象、构造函数和原型对象之间的关系可以用下图表示:

                 构造函数
                   |
                   |
            ----------------
            |              |
        原型对象          实例对象

下面是一个创建对象和实例对象的例子:

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

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

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

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.

在这个例子中,Person函数是一个构造函数,它定义了对象具有的属性和方法。person1person2Person函数的实例对象,它们具有构造函数的所有属性和方法,还具有自己独有的属性和方法。

希望这篇文章对你有帮助。如果你还有任何问题,请随时留言。