构造函数的prototype是其专属属性,指向原型对象,该对象默认含constructor属性并指向自身;实例通过[[prototype]]链访问它,应使用object.getprototypeof而非__proto__。

直接通过构造函数名加 .prototype 就能访问它的原型对象。这是最标准、最推荐的方式。
构造函数的 prototype 是它的专属属性
每个函数(包括自定义构造函数)在创建时,引擎会自动为其添加一个 prototype 属性,值是一个普通对象,也叫“原型对象”。这个对象默认有 constructor 属性,指向该函数本身。
- 它只属于函数,普通对象(如
{}或new Date())没有 prototype 属性 - 它不是实例的属性,而是构造函数自身的属性
- 它是所有由该构造函数创建的实例,其内部 [[Prototype]] 所指向的目标
常见写法示例
比如定义一个构造函数:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
function Animal(name) {
this.name = name;
}
// 直接访问它的 prototype
console.log(Animal.prototype); // { constructor: Animal }
你可以往这个对象上添加方法或属性,它们会被所有实例共享:
Animal.prototype.speak = function() { console.log(this.name + ' makes a sound'); };Animal.prototype.species = 'mammal';
注意区分 prototype 和 __proto__
prototype 是函数才有的;而 __proto__ 是实例对象上的(指向其构造函数的 prototype),但它非标准,不建议直接使用。
-
Animal.prototype→ 构造函数的原型对象 -
const dog = new Animal('Dog'); dog.__proto__→ 等价于Animal.prototype,但应改用Object.getPrototypeOf(dog)
验证原型关系的可靠方式
除了 Constructor.prototype,还可以用标准 API 验证:
-
Object.getPrototypeOf(new Animal('cat')) === Animal.prototype→true -
Animal.prototype.constructor === Animal→true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










