JavaScript 静态方法

静态方法(Static Method)指直接挂在构造函数或类上、无须创建实例就能调用的方法。JavaScript 里常见的内置例子是 Math.max()、Array.isArray()、Date.now()——它们都用"类名.方法()"调用。把与具体实例无关的通用逻辑写成静态方法,代码会更清晰。

为什么要用静态方法

当一个方法不需要读取某个具体对象的属性时,就不必先 new 一个对象。静态方法适合放:工具函数(计算、校验)、工厂方法(帮你生成对象)、常量配置。它的调用形式统一为 类名.方法()。

传统方式:挂在构造函数上

ES6 之前没有 class,函数本身就是"类"。直接在构造函数上添加属性,就得到了静态方法:

function User(name) {
    this.name = name;
}
User.create = function (name) { // 定义在 User 上,而不是原型上
    return new User(name);
};
User.company = '示例公司'; // 静态属性

var u = User.create('张三'); // 不用 new 也能"造"出对象
console.log(u.name);        // 输出:张三
console.log(User.company);  // 输出:示例公司

ES6 class 的 static

class 语法用 static 关键字声明静态方法,更直观。静态方法里的 this 指向类本身:

class MathUtil {
    static add(a, b) { // static 声明静态方法
        return a + b;
    }
    static version() {
        return '1.0';
    }
    static who() {
        return this === MathUtil ? '我是 MathUtil' : '其他';
    }
}
console.log(MathUtil.add(2, 3));  // 输出:5
console.log(MathUtil.version());  // 输出:1.0
console.log(MathUtil.who());      // 输出:我是 MathUtil
// 注意:静态方法里没有实例,访问不到 this.name 这类实例属性

内置对象的静态方法

JavaScript 内置了大量静态方法,见名知义:

console.log(Array.isArray([1, 2]));       // 输出:true(判断是否为数组)
console.log(Date.now());                  // 输出:1750000000000(当前毫秒时间戳)
console.log(Object.keys({ a: 1, b: 2 })); // 输出:[ 'a', 'b' ]
console.log(Math.max(3, 8, 5));           // 输出:8
console.log(Number.isNaN('abc'));         // 输出:false(不做类型转换)

静态方法与实例方法对比

方式定义位置调用方式能否访问实例数据
静态方法类 / 构造函数上类名.方法()不能(没有实例)
实例方法原型 prototype 上实例.方法()能(this 指向实例)

选择建议:与单个对象状态无关的通用逻辑用静态方法;需要读写 this 上的数据(如 this.name)时,必须用实例方法。

小结:静态方法挂在类本身上、用"类名.方法()"调用,适合工具函数、工厂方法与内置 API(Math、Array、Date 等)。它与实例方法的本质区别在于:静态方法没有指向实例的 this,因此不能访问实例属性。

笔记加载中…