测试是否存在动态选择的类



我有来自要处理的外部源的数据。为了做到这一点,我正在接收的对象被标记为它们的原始类名。现在,我想使用这个标记名,并使用它在我自己的应用程序中填充模型。我一直在检查那个类在我的代码库中是否有等价的类。它看起来像这样:

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)) {}

这里的正确方法是什么?

我看不出只用一行就能做到这一点的明确方法。

其中一种可能的方法是注册现有类的方式。例如,如果稍后使用某种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。所以你的逻辑被包裹在一个地方。

我找到了一种实现的方法

(记入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);

最新更新