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
相关产品推荐
相关产品推荐

