javascript - 从类名字符串实例化一个对象
问题描述
我正在尝试根据所选选项动态实例化 JS 对象。我的 HTML 看起来像
<select class="klass">
<option value="Klass1">1</option>
<option value="Klass2">2</option>
<option value="Klass3">3</option>
</select>
这里是我的 JS(到目前为止)
let elements = [1,2,3]
let klass_name = document.querySelector('.klass').value
let klass = new ???(elements)
console.log(klass.params())
export default class Klass1 {
constructor(elements) {
this.elements = elements
}
params() {
return "lorem"
}
}
export default class Klass2 {
constructor(elements) {
this.elements = elements
}
params() {
return "ipsum"
}
}
export default class Klass3 {
constructor(elements) {
this.elements = elements
}
params() {
return "this is very comPLEex@"
}
}
我应该用什么代替???
?
如果我不必在 JS 中预定义所有可能的选项,那就太好了。
我不是要更改类,而是要实例化此类的对象。
解决方案
它正在构建一个字典,您可以在其中从与要创建的类关联的选择中检索到的值。所以 Klasses[klass_name] 返回你想要创建的类。
const Klasses = {
Klass1: class Klass1 {
constructor(elements) {
this.elements = elements
}
params() {
return "1"
}
},
Klass2: class Klass2 {
constructor(elements) {
this.elements = elements
}
params() {
return "2"
}
}
};
let elements = [1, 2, 3]
let klass_name = document.querySelector('.klass').value
const klass = new Klasses[klass_name]();
console.log(klass.params());
<select class="klass">
<option value="Klass1">1</option>
<option value="Klass2">2</option>
<option value="Klass3">3</option>
</select>
推荐阅读
- node.js - 我想知道如何使用 sequelize 但没有 sequelize.query 来执行特定的 SQL
- java - jBPM 业务应用程序:无法获取 REST 服务器(错误 500)
- javascript - ES6 私有方法可以访问“this”关键字 JavaScript 习惯用法
- python - 在控制台上运行其他命令时,如何在 ipython 中运行 PyQt 而不会冻结 GUI?
- web-scraping - 在给定主页的情况下查找子页面
- css - CSS:让 div 超出其部分的底部
- python - 使用turtle模块编写代码绘制矩形
- python - 使用 while 循环而不是 for 循环遍历两个列表
- android - 如何将从房间数据库中获取的对象绑定到我的视图
- python - PANDAS:如何在组内输出重复值?