📜  JavaScript 中的原型(1)

📅  最后修改于: 2023-12-03 14:42:30.319000             🧑  作者: Mango

JavaScript 中的原型

JavaScript 中的原型是一种对象属性,它允许您共享方法和属性在多个对象之间。在 JavaScript 中,每个对象都有一个原型对象,它充当对象的基础模板。原型对象包含共享的方法和属性,可以被对象实例继承和访问。

原型链

在 JavaScript 中,每个对象都有一个原型,而原型也可以具有自己的原型,形成一个原型链。当您访问某个对象的属性或方法时,JavaScript 引擎首先查找对象本身是否具有该属性或方法。如果未找到,则将沿着原型链继续搜索,直到找到该属性或方法或者到达原型链的末端(null)。

原型对象

在 JavaScript 中,原型对象可以通过构造函数的 .prototype 属性访问。构造函数是用于创建对象实例的函数,每个构造函数都有一个与之关联的原型对象。通过原型对象,可以向构造函数创建的所有对象实例添加共享的方法和属性。

以下是一个示例:

// 构造函数
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// 在原型对象上添加方法
Person.prototype.introduce = function() {
  console.log("My name is " + this.name + " and I am " + this.age + " years old.");
};

// 创建对象实例
var person1 = new Person("Alice", 25);
var person2 = new Person("Bob", 30);

// 调用共享的方法
person1.introduce(); // 输出: My name is Alice and I am 25 years old.
person2.introduce(); // 输出: My name is Bob and I am 30 years old.

在上面的示例中,Person.prototype 是一个原型对象,它包含了共享的 introduce 方法。通过将该方法添加到原型对象上,所有通过 Person 构造函数创建的对象实例都可以访问和调用该方法。

对象实例的原型

在 JavaScript 中,每个对象实例都有一个 __proto__ 属性,指向该对象的原型。通过这个属性,对象实例可以访问和继承原型对象的方法和属性。

以下是一个示例:

// 构造函数
function Car(brand) {
  this.brand = brand;
}

// 在原型对象上添加方法
Car.prototype.start = function() {
  console.log("Starting the " + this.brand + " car...");
};

// 创建对象实例
var car1 = new Car("Tesla");

// 调用原型对象的方法
car1.start(); // 输出: Starting the Tesla car...

在上面的示例中,car1 是通过 Car 构造函数创建的对象实例。car1.__proto__ 指向 Car.prototype,因此可以通过 car1 对象实例访问并调用原型对象中的 start 方法。

总结

原型是 JavaScript 中非常重要的概念,它允许您在对象之间共享方法和属性。通过原型链,在对象实例中找不到的属性或方法将会在其原型链上继续查找。了解原型的概念和用法,可以帮助您更好地理解 JavaScript 的面向对象编程模型。