实例属性定义在构造函数内、绑定this,每个实例独有一份;原型方法定义在prototype上,所有实例共享一份。访问时优先查找实例自身,再沿原型链查找;修改实例属性不影响其他实例,修改原型方法则影响所有未覆盖该方法的实例。

区分实例属性和原型上的方法,关键看定义位置、内存分配方式,以及是否被所有实例共享。
看定义位置:谁身上写的?
实例属性(含实例方法)写在构造函数内部,绑定到 this 上;原型上的方法写在构造函数的 prototype 对象上。
- 实例属性示例:
function Car() { this.color = 'red'; this.start = function() { console.log('Engine on'); } } - 原型方法示例:
Car.prototype.drive = function() { console.log('Driving...'); }
看内存占用:一份还是多份?
原型方法只在内存中存一份,所有实例共用;实例方法每个实例都有一份独立副本。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const c1 = new Car(); const c2 = new Car();-
c1.start === c2.start // false(各自独立) -
c1.drive === c2.drive // true(指向同一函数)
看属性查找顺序:优先找谁?
访问一个属性或方法时,JavaScript 先查实例自身,找不到再沿 [[Prototype]] 链向上找原型。
立即学习“Java免费学习笔记(深入)”;
- 如果实例上也有同名方法(比如
this.drive = ...),它会覆盖原型上的drive - 用
Object.hasOwn(c1, 'drive')可判断是否为实例自有属性(返回false表示来自原型)
看能否修改影响其他实例?
改实例属性只影响当前对象;改原型方法会影响所有未覆盖该方法的实例。
-
c1.color = 'blue'不影响c2.color -
Car.prototype.drive = function() { console.log('Zoom!'); }后,c1.drive()和c2.drive()都输出Zoom!

















