Js中的prototype属性

43 阅读1分钟

在 JavaScript 中,当你创建一个函数(例如 Person),这个函数不仅仅是一个函数,它其实也是一个“类”的构造器。这个“类”可以用来创建多个实例(或称为“对象”),每个实例都有它自己的属性和方法。 但是,有些属性和方法可能是这个“类”的所有实例都会用到的,我们不想在每个实例上都单独定义这些属性和方法,因为这样很浪费内存,也不方便管理。 prototype 就是用来解决这个问题的。你可以把 Person.prototype 看作是一个“公共仓库”,用来存放所有 Person 实例都会用到的属性和方法。当你创建一个 Person 的实例时,这个实例就会“记住”它的“类”的 prototype 在哪里,以便需要时可以从中获取属性和方法。

举个简单的例子: 假设你有一个 Person 函数(或“类”),你想让所有的 Person 实例都有一个 greet 方法。你不需要在每个 Person 实例上都单独定义这个方法,而是可以在 Person.prototype 上定义它。这样,无论你创建多少个 Person 实例,它们都可以共享这个 greet 方法。 这就是 prototype 的基本概念。它允许你在“类”的级别上定义属性和方法,而不是在每个实例上都单独定义。这样可以节省内存,提高代码的可维护性。

代码示例:

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

// 在 Person 的 prototype 上添加一个方法
Person.prototype.greet = function() {
    console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
};

// 创建一个 Person 的实例
var john = new Person('John', 30);

// 调用 greet 方法
john.greet(); // 输出: Hello, my name is John and I'm 30 years old.