>[danger]function的prototype是什么? 在 JavaScript 中,每个函数(`function`)都有一个特殊的属性 `prototype`,它是一个普通的对象。该 `prototype` 对象被用作创建由该函数构造的对象(实例)的原型。换句话说,`prototype` 是一个函数的原型对象。 当我们使用 `new` 关键字来实例化一个函数时,JavaScript 引擎会将函数的 `prototype` 对象作为新对象的原型(`[[Prototype]]` 属性)。这样,新对象就能够访问和继承原型对象上的属性和方法。 以下是一个示例来说明函数的 `prototype` 属性: ```javascript // 定义一个构造函数 function Person(name) { this.name = name; } // 在构造函数的 prototype 上定义方法 Person.prototype.sayHello = function() { console.log(`Hello, my name is ${this.name}.`); }; // 实例化一个对象 const person = new Person('Alice'); person.sayHello(); // 调用原型对象上的方法 ``` 在上述示例中,`Person` 是一个构造函数。我们在 `Person.prototype` 对象上定义了一个 `sayHello` 方法。当我们通过 `new Person('Alice')` 创建 `person` 对象时,`person` 对象的原型(`[[Prototype]]`)指向 `Person.prototype`。因此,`person` 对象继承了 `Person.prototype` 上的 `sayHello` 方法,并可以调用它。 需要注意的是,每个函数都有自己的 `prototype` 对象,但它只有在函数被用作构造函数(通过 `new` 关键字实例化对象)时才会起作用。对于普通的函数调用,函数的 `prototype` 属性并不直接影响任何对象。 总结起来,函数的 `prototype` 属性指向一个对象,该对象用作由该函数构造的对象的原型。通过在原型对象上定义方法或属性,我们可以让由该构造函数创建的对象共享这些方法或属性,实现属性和方法的继承。