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

如何不使用eval()创建与已有未知类实例同类型的新实例?

不用eval创建同类型实例的简洁方案

你完全不需要绕弯子去拿构造函数名再用eval,直接利用实例本身的constructor属性就能创建新实例——这个属性本来就指向该实例所属的类。

优化后的代码

class sampleClass_A { name = "Archimedes";}
class sampleClass_B { name = "Pythagoras";}

let sampleInstance = new sampleClass_A();

// 直接用constructor创建新实例
let newInstanceOfTheSameClass = new sampleInstance.constructor();
console.log(newInstanceOfTheSameClass.name); // "Archimedes"

为什么这个方案可行

每个JavaScript/TypeScript实例的constructor属性默认指向它的构造函数,不管你在什么环境(Node.js、桌面应用、非浏览器环境等)下,这个属性都能正常访问,完全不依赖全局对象(比如浏览器的window)。

扩展:构造函数需要参数的情况

如果你的类构造函数需要传入参数,直接在调用时传递即可:

class sampleClass_A {
  constructor(public name: string) {}
}

let sampleInstance = new sampleClass_A("Archimedes");
let newInstance = new sampleInstance.constructor("New Archimedes");
console.log(newInstance.name); // "New Archimedes"

这个方案既避免了eval带来的安全风险和性能问题,又比你原来的实现简洁得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:05:56