You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何从类的实例化对象获取对应的原类并进行修改?

你可以通过实例的 constructor 属性直接访问到它对应的构造类,在没有手动改写类的 prototype.constructor 属性的前提下,这个指向是默认准确的,拿到类引用后你就可以修改它的静态成员、原型成员等内容。

示例代码

// 原始定义的类
class Foo {
    constructor() {}
}
const myFoo = new Foo();

// 接收实例作为参数的处理函数
function modifyTargetClass(instance) {
  // 获取实例对应的构造类
  const TargetClass = instance.constructor;

  // 1. 新增/修改类的静态属性/方法
  TargetClass.staticText = "新增的静态属性";
  TargetClass.sayHello = () => console.log("我是新增的静态方法");

  // 2. 新增/修改原型方法,所有该类的实例都会生效
  TargetClass.prototype.commonMethod = function() {
    console.log("所有Foo实例都可以调用这个方法");
  }
}

// 调用函数修改类
modifyTargetClass(myFoo);

// 验证修改结果
console.log(Foo.staticText); // 输出:新增的静态属性
Foo.sayHello(); // 输出:我是新增的静态方法
myFoo.commonMethod(); // 输出:所有Foo实例都可以调用这个方法
// 新创建的实例也能用到新增的原型方法
const newFoo = new Foo();
newFoo.commonMethod(); // 输出:所有Foo实例都可以调用这个方法

注意事项

  • 如果实例所属的类存在继承关系,constructor 指向的是实例实际对应的子类,如果你需要访问父类构造函数,可以通过 Object.getPrototypeOf(TargetClass) 获取。
  • 不要随意修改内置类(比如 Array、String、Number 等)的原型,这类修改是全局生效的,很容易和其他代码产生命名冲突或不可预期的bug。

内容的提问来源于stack exchange,提问作者Julian Lachniet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:48:02