在 JavaScript ECMAScript 6 中从类名创建对象

编程入门 行业动态 更新时间:2024-10-09 14:20:02
本文介绍了在 JavaScript ECMAScript 6 中从类名创建对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想使用 ES6 创建对象工厂,但旧式语法不适用于新式.

I want create object factory using ES6 but old-style syntax doesn't work with new.

我有下一个代码:

export class Column {} export class Sequence {} export class Checkbox {} export class ColumnFactory { constructor() { this.specColumn = { __default: 'Column', __sequence: 'Sequence', __checkbox: 'Checkbox' }; } create(name) { let className = this.specColumn[name] ? this.specColumn[name] : this.specColumn['__default']; return new window[className](name); // this line throw error } } let factory = new ColumnFactory(); let column = factory.create('userName');

我做错了什么?

推荐答案

不要把类名放在那个对象上.将类本身放在那里,这样您就不必依赖它们是全局的并且可以通过 window 访问(在浏览器中).

Don't put class names on that object. Put the classes themselves there, so that you don't have to rely on them being global and accessible (in browsers) through window.

顺便说一句,没有充分的理由让这个工厂成为一个类,你可能只会实例化一次(单例).把它变成一个对象:

Btw, there's no good reason to make this factory a class, you would probably only instantiate it once (singleton). Just make it an object:

export class Column {} export class Sequence {} export class Checkbox {} export const columnFactory = { specColumn: { __default: Column, // <-- __sequence: Sequence, // <-- __checkbox: Checkbox // <-- }, create(name, ...args) { let cls = this.specColumn[name] || this.specColumn.__default; return new cls(...args); } };

更多推荐

在 JavaScript ECMAScript 6 中从类名创建对象

本文发布于:2023-11-26 09:03:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1633479.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象   JavaScript   ECMAScript

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!