当前位置:  开发笔记 > 编程语言 > 正文

使用动态名称在ES6中创建类的实例?

如何解决《使用动态名称在ES6中创建类的实例?》经验,为你挑选了2个好方法。



1> sdgluck..:

有几种方法可以实现这一目标......

1.代理类

根据@ thefourtheye维护名称到类的映射的示例,您可以拥有一个类,其作用是获取所需类的名称并代理其实例化:

[ 见工作 ]

定义你的课程

// ClassOne.js
export class ClassOne {
    constructor () {
        console.log("Hi from ClassOne");
    }
}

// ClassTwo.js
export class ClassTwo {
    constructor (msg) {
        console.log(`${msg} from ClassTwo`);
    }
}

定义代理类(例如DynamicClass)

import ClassOne from './ClassOne';
import ClassTwo from './ClassTwo';

// Use ES6 Object Literal Property Value Shorthand to maintain a map
// where the keys share the same names as the classes themselves
const classes = {
    ClassOne,
    ClassTwo
};

class DynamicClass {
    constructor (className, opts) {
        return new classes[className](opts);
    }
}

export default DynamicClass;

用法示例

import DynamicClass from './DynamicClass';

new DynamicClass('ClassOne'); //=> "Hi from ClassOne"
new DynamicClass('ClassTwo', 'Bye'); //=> "Bye from ClassTwo"
2.工厂功能

使用一个函数对类名对象 - >类映射执行查找,并返回对类的引用,然后我们可以像往常一样实例化.

定义工厂功能

import ClassOne from './ClassOne';
import ClassTwo from './ClassTwo';

const classes = { ClassOne, ClassTwo };

export default function dynamicClass (name) {
  return classes[name];
}

用法示例

import dynamicClass from './dynamicClass'

const ClassOne = dynamicClass('ClassOne') // Get the ClassOne class

new ClassOne(args) // Create an instance of ClassOne


它实际上不一定是一个类.它可以是一个简单的工厂功能.一个类有点矫枉过正恕我直言.

2> thefourtheye..:

将类存储在Object中,键是您希望它们成为的类的名称.

const classesMapping = {
  'One': ClassOne,
  'Two': ClassTwo
};

然后根据这样的键名创建类

return new classesMapping[desiredSubclassName](args);

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有