如何通过存储构造函数名的字符串变量创建实例并访问原型方法
你之前的写法错误原因:Object.create()要求入参为对象作为新实例的原型,你传入的是字符串类型的构造函数名,自然无法正常运行。
以下是两种常用的可行方案:
方案1:使用全局对象获取构造函数(仅适用于全局声明的构造函数)
如果你的构造函数是用var声明在全局作用域,或者直接挂载到全局对象上,可以直接通过全局对象的下标访问到构造函数:
// 浏览器环境 const objFlipkart = new window[myVariable](); // Node.js环境 const objFlipkart = new global[myVariable](); objFlipkart.someFunction('someValue'); // 输出 someValue
注意:如果构造函数是用let/const在全局作用域声明的,不会被挂载到全局对象上,这个方案不生效
方案2:使用构造函数映射表(更推荐,无作用域限制、更安全)
提前把你所有的构造函数存在一个统一的映射对象中,通过变量值取到对应的构造函数即可:
// 提前定义构造函数映射表 const constructorMap = { flipkart: flipkart, // 其他构造函数也可以都放这里 // amazon: amazon, // shopify: shopify }; // 创建实例 const objFlipkart = new constructorMap[myVariable](); objFlipkart.someFunction('someValue'); // 输出 someValue
如果是要访问已经创建好的实例,同理提前维护实例映射表即可:
// 提前创建好实例存在映射表中 const instanceMap = { flipkart: new flipkart() // 其他已创建的实例 }; // 直接访问 const objFlipkart = instanceMap[myVariable]; objFlipkart.someFunction('someValue'); // 输出 someValue
内容的提问来源于stack exchange,提问作者Greatest
相关产品推荐
相关产品推荐

