测试动态选择的类的存在

时间:2018-07-27 08:54:05

标签: node.js ecmascript-6 es6-class

我有要处理的来自外部来源的数据。为了做到这一点,我收到的对象被标记为其原始类名。现在,我想使用该标签名称,并使用它在我自己的应用程序中填充模型。我被困在检查代码库中是否具有等效类的步骤。它看起来像这样:

this.objects.forEach((object) => {

if (typeof object.class_tag !== 'undefined') { //the problem line
//create class instance
}

});

在php中,我只需调用class_exists即可实现

<?php
if (class_exists($object->class_tag)) {}

这里正确的方法是什么?

2 个答案:

答案 0 :(得分:1)

我看不出在一行中执行此操作的明确方法。

可能的方法之一是注册现有类的方式。 例如,如果以后使用某种namespace,则只需检查该类在命名空间中是否存在。 示例代码:

class A {}
const a = "A"
const namespace = { A };

if (namespace[a]) {
  // class exists, you can create object
  const instance = new namespace[a]();
}

可能更好的方法是制作一些service,这将为您registerClasscheckClasscreateInstance。因此,您的逻辑被包装在一个地方。

答案 1 :(得分:0)

我找到了一种方法

(贷记https://stackoverflow.com/a/34656123/746549

let logger = require('../javascripts/serverlog');
let util = require('util');

let Extension = require('../models/object/Extension');

const classes = {Extension: Extension};

/**
 * Utility to emulate class exists / dynamic class naming
 * @param className
 * @returns {*}
 */
module.exports.dynamicClass = (className) => {

    logger.debug(classes);
    logger.debug(className);
    if (classes[className]) {
        return classes[className];
    } else {
        return false;
    }

};

用法:

let ClassOrFalse = dynamicClass.dynamicClass(object._class_tag);