LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

实例成员和静态成员在对象中的用法

zhenglin
2026年5月9日 15:53 本文热度 64

在 JavaScript 中,实例成员(Instance Members)静态成员(Static Members) 的用法取决于你使用的是 类(Class)语法 还是 普通对象/构造函数。虽然“静态成员”这个术语通常用于类,但在对象字面量或构造函数中也可以模拟类似行为。

下面从 类(现代推荐方式)构造函数 + 原型(传统方式) 两个常见角度详细说明它们在对象中的用法


一、使用 ES6 Class--清晰的方式

✅ 定义

class Car {

  // 实例属性(ES2022+ 支持)

  brand = "Unknown";


  // 构造函数中定义实例属性

  constructor(model) {

    this.model = model; // 实例成员

    this.speed = 0; // 实例成员

  }


  // 实例方法 → 自动绑定到 prototype

  accelerate() {

    this.speed += 10;

    console.log(`${this.model} is now at ${this.speed} km/h`);

  }


  // 静态属性

  static wheels = 4;


  // 静态方法

  static isElectric(carInstance) {

    return carInstance.model.includes("EV");

  }

}

🔧 用法(创建对象后如何使用)

// 创建实例对象

const tesla = new Car("Model S EV");


// ✅ 使用实例成员(通过对象实例)

console.log(tesla.model); // "Model S EV"

tesla.accelerate(); // "Model S EV is now at 10 km/h"


// ✅ 使用静态成员(通过类名,不能通过实例!)

console.log(Car.wheels); // 4

console.log(Car.isElectric(tesla)); // true


// ❌ 错误用法

console.log(tesla.wheels); // undefined

tesla.isElectric(); // TypeError!

 关键

  • 实例成员属于每个对象自己
  • 静态成员属于类本身,与具体对象无关

二、使用构造函数 + 原型(传统方式)

在没有 class 的时代,我们这样模拟:

✅ 定义

// 构造函数 → 用于初始化实例成员

function Dog(name) {

  this.name = name; // 实例属性

  this.bark = function () {

    // 实例方法(不推荐,每次新建都创建新函数)

    console.log(`${this.name} says woof!`);

  };

}


// 推荐:将方法挂到 prototype 上(共享,节省内存)

Dog.prototype.run = function () {

  console.log(`${this.name} is running`);

};


// 模拟“静态成员” → 直接作为构造函数的属性/方法

Dog.species = "Canis lupus";

Dog.createPuppy = function (parentName) {

  return new Dog(`${parentName}'s pup`);

};

🔧 用法

代码高亮:

const buddy = new Dog("Buddy");


// ✅ 实例成员

buddy.run(); // "Buddy is running"

console.log(buddy.name); // "Buddy"


// ✅ “静态成员”(其实是构造函数的属性)

console.log(Dog.species); // "Canis lupus"

const puppy = Dog.createPuppy("Buddy"); // 创建新实例


// ❌ 不能通过实例访问

console.log(buddy.species); // undefined

📌 虽然没有 static 关键字,但直接给构造函数赋属性/方法就是静态成员的等效实现。


三、对象字面量(Object Literal)中能有静态成员吗?

不能。对象字面量只是一个单一实例,没有“类”的概念,所以:

const user = {

  name: "Alice", // 这是实例成员(也是唯一成员)

  greet() {

    console.log(`Hi, I'm ${this.name}`);

  },

};


// 没有“静态成员”的概念,因为没有多个实例,也没有类

如果你想在对象字面量中模拟“工具方法”,通常会额外创建一个命名空间对象


const UserUtils = {

  validateEmail(email) {

    /* ... */

  },

  formatDate(date) {

    /* ... */

  },

};


const user = { name: "Alice" };

UserUtils.validateEmail("a@example.com"); // 类似静态方法调用

四、总结:在对象中的用法对比

场景实例成员静态成员
Class 语法this.xxx 或类字段;通过 obj.xxx 访问static xxx;通过 ClassName.xxx 访问
构造函数this.xxxFunc.prototype.method;通过 obj.xxx 访问直接 Func.xxx = ...;通过 Func.xxx 访问
对象字面量所有属性都是“实例成员”(因为只有一个对象)无法定义,需另建工具对象


五、最佳实践建议

  1. 优先使用 class 语法 —— 语义清晰,支持 static 关键字。

  2. 实例方法放 prototype(或 class 方法),避免在构造函数内重复创建函数。

  3. 静态成员用于
    • 工厂方法(createXXX

    • 工具函数(compare, validate

    • 常量(MAX_SIZE, DEFAULT_CONFIG

  4. 永远不要试图通过实例访问静态成员 —— 这是常见错误!


一句话总结

实例成员描述“这个对象是什么、能做什么”,静态成员描述“这类对象相关的通用功能”。



该文章在 2026/5/9 15:53:44 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号