prototype是函数的属性,为new创建的实例提供共享原型;它默认含constructor指向自身,实例通过__proto__链接到它,实现方法共享与动态继承。

构造函数的 prototype 属性,本质是一个“共享说明书”——它不是给构造函数自己用的,而是为所有通过 new 它创建出来的实例对象准备的统一模板。
prototype 是谁的属性?只属于函数,且专为构造场景设计
只有函数(普通函数、具名函数表达式等)才有 prototype 属性,箭头函数、匿名函数表达式没有。这个属性在函数一被定义就存在,值默认是一个对象,里面带一个 constructor 属性,指向该函数本身。
-
function Person() {}→Person.prototype自动存在,初始值类似{ constructor: Person } - 这个
prototype对象不会被实例“拥有”,但会被实例“链接到” - 非构造用途的函数(比如工具函数
utils.format())也有prototype,但通常不使用——它只是语言机制的一部分,并非强制用于构造
prototype 指向的对象,就是实例的“共同父本”
当你写 const p1 = new Person(),JavaScript 会自动把 p1.__proto__(即内部 [[Prototype]])设为 Person.prototype。这意味着:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
p1自身没有的方法(比如sayName()),只要定义在Person.prototype上,它就能用 - 所有
new Person()创建的实例,__proto__都指向同一个Person.prototype,因此共享方法,不重复占内存 - 修改
Person.prototype(如追加方法),已存在的实例立刻生效——这是动态继承的基础
别混淆:prototype 和 __proto__ 不是同一个东西
prototype 是函数的显式属性;__proto__ 是实例对象的隐式原型引用。二者通过 new 过程建立联系:
-
Person.prototype→ 是一个对象(比如{ sayName() {}, constructor: Person }) -
p1.__proto__ === Person.prototype→ 返回true,说明链接成功 -
Person.__proto__则指向Function.prototype,因为函数本身也是对象,由Function构造
原型对象不是空架子,它是可读写的共享空间
你可以随时往 Person.prototype 上添加属性或方法,所有已有和未来的实例都能访问:
-
Person.prototype.species = 'Homo sapiens'→ 所有p1、p2都能读取p1.species -
Person.prototype.greet = function() { return `Hi, I'm ${this.name}` }→ 实例调用时,this正确绑定到自身 - 注意:不要直接赋值
Person.prototype = {...},否则会切断已有实例与新原型的连接(constructor也会丢失)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










