prototype是函数的属性,指向一个对象,实例通过[[Prototype]]链访问其方法;可直接赋值Constructor.prototype.method或用类声明定义,注意避免覆盖丢失constructor。

在 JavaScript 中,prototype 属性用于给构造函数(或类)的实例添加共享方法。它不是直接挂在实例上,而是通过原型链让所有实例都能访问。
什么是 prototype?
每个函数(包括构造函数和类)都有一个 prototype 属性,它是一个对象,默认包含一个 constructor 指回该函数。当你用 new 创建实例时,实例的内部 [[Prototype]] 会指向这个 prototype 对象。
如何给 prototype 添加方法?
直接给构造函数的 prototype 对象添加属性或方法即可。这些方法会被所有实例继承:
- 语法:
Constructor.prototype.methodName = function() { ... }; - 也可以一次性设置多个方法,用对象字面量赋值(注意覆盖原有 prototype)
例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
function Person(name) {
this.name = name;
}
<p>Person.prototype.sayHello = function() {
console.log('Hello, I am ' + this.name);
};</p><p>const p1 = new Person('Alice');
const p2 = new Person('Bob');</p><p>p1.sayHello(); // Hello, I am Alice
p2.sayHello(); // Hello, I am Bob
ES6 类中怎么添加原型方法?
类声明中的方法默认就定义在原型上,不需要手动操作 prototype:
class Animal {
constructor(name) {
this.name = name;
}
speak() { // 自动挂到 Animal.prototype 上
console.log(this.name + ' makes a sound');
}
}
<p>const dog = new Animal('Dog');
dog.speak(); // Dog makes a sound
你也可以在类外部扩展原型:
Animal.prototype.run = function() {
console.log(this.name + ' is running');
};
注意事项和常见误区
-
不要重写整个 prototype:比如
Person.prototype = { sayHello() {...} }会丢失constructor,需手动修复:Person.prototype.constructor = Person -
箭头函数不能用作原型方法:因为它没有自己的
this,且无法被new调用,也不适合绑定到原型 -
实例属性 ≠ 原型方法:在构造函数内用
this.xxx = ...定义的是独有属性;而prototype上的是共享方法,节省内存
不复杂但容易忽略细节。

















