javascript类方法默认挂载在原型上,实例共享同一份方法;实例方法绑定到实例自身,每个实例独立副本;静态方法挂载在类函数自身;字段声明直接赋值给this,存在于实例自身。

普通类方法(如 sayHi())在 prototype 上
你在 class 中写的非静态、非箭头、非字段赋值式的方法,比如:
class Person {
constructor(name) {
this.name = name;
}
sayHi() {
return `Hi, I'm ${this.name}`;
}
}
等价于把 sayHi 函数挂到 Person.prototype 上:
-
Person.prototype.sayHi是一个函数 -
new Person('Alice').sayHi是对它的引用,不是副本 -
new Person('Alice').hasOwnProperty('sayHi')返回 false -
new Person('Alice').__proto__ === Person.prototype成立
实例方法(如 this.sayHi = function() {})在实例自身
如果你在 constructor 里或类字段中用函数表达式或箭头函数定义方法,它会绑定到实例:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
class Person {
constructor(name) {
this.name = name;
this.sayHi = function() { return `Hi, I'm ${this.name}`; };
}
// 或者用字段语法:
sayBye = () => `Bye, ${this.name}`;
}
- 每个实例都有一份独立的函数副本
person1.sayHi !== person2.sayHi-
person1.hasOwnProperty('sayHi')返回 true - 无法被子类继承(不走原型链)
静态方法(static)挂在类函数自身
静态方法不属于实例或原型,而是直接挂在构造函数上:
class Person {
static createAdmin() {
return new Person('Admin');
}
}
-
Person.createAdmin()可调用 -
new Person().createAdmin是 undefined - 不参与原型链查找,也不被实例继承
字段声明(name = 'xxx')也在实例上
ES2022 引入的公共类字段语法,会在构造时直接赋值给 this:
class Person {
name = 'Anonymous';
age = 0;
}
-
new Person().name存在于实例自身 -
Person.prototype.name是 undefined - 不共享,不可被继承
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










