测试动态选择的 class 是否存在
Test the existence of a dynamically chosen class
我有来自外部来源的数据需要处理。为了做到这一点,我收到的对象都标有它们原来的 class 名称。现在我想使用该标签名称并使用它来填充我自己的应用程序中的模型。我停留在检查 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)) {}
这里正确的做法是什么?
我没有在一行中看到执行此操作的明确方法。
一种可能的方法是注册现有 classes 的方式。
例如,如果您稍后使用某种 namespace
,您可以简单地检查 class 是否存在于命名空间中。
示例代码:
class A {}
const a = "A"
const namespace = { A };
if (namespace[a]) {
// class exists, you can create object
const instance = new namespace[a]();
}
可能更好的方法是制作一些 service
,这将为您提供 registerClass
、checkClass
和 createInstance
。所以你的逻辑被包裹在一个地方。
我找到了一种方法
(归功于 )
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);
我有来自外部来源的数据需要处理。为了做到这一点,我收到的对象都标有它们原来的 class 名称。现在我想使用该标签名称并使用它来填充我自己的应用程序中的模型。我停留在检查 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)) {}
这里正确的做法是什么?
我没有在一行中看到执行此操作的明确方法。
一种可能的方法是注册现有 classes 的方式。
例如,如果您稍后使用某种 namespace
,您可以简单地检查 class 是否存在于命名空间中。
示例代码:
class A {}
const a = "A"
const namespace = { A };
if (namespace[a]) {
// class exists, you can create object
const instance = new namespace[a]();
}
可能更好的方法是制作一些 service
,这将为您提供 registerClass
、checkClass
和 createInstance
。所以你的逻辑被包裹在一个地方。
我找到了一种方法
(归功于
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);