返回
函数、原型、对象、构造函数,傻傻分不清楚?
前端
2023-09-13 21:42:49
在面向对象编程(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
函数是一个构造函数,它定义了对象具有的属性和方法。person1
和person2
是Person
函数的实例对象,它们具有构造函数的所有属性和方法,还具有自己独有的属性和方法。
希望这篇文章对你有帮助。如果你还有任何问题,请随时留言。