使用字符串变量访问Node.js静态方法

时间:2019-03-22 17:34:49

标签: javascript node.js class variables

我已经在Adonis中导入了一些课程

const User = use('App/Models/User')
const Orders = use('App/Models/Orders')

我希望能够动态访问上述类之一。我的意思是,变量将保存我要访问的类。该变量将通过用户的API调用进行填充。

let className = 'Orders'

如何使用className变量访问Orders类。

我尝试过

[className].query().where('orderNumber','123').fetch()

但这似乎不起作用。

3 个答案:

答案 0 :(得分:4)

创建一个DETACHED_PROCESS = 8 # bit mask taken from the linked doc below subprocess.Popen(executable, creationflags=DETACHED_PROCESS, close_fds=True) 地图:

name -> class

,然后使用const classes = { __proto__: null, // to avoid people being able to pass something like `toString` Users, Orders, }; // or if you don't want to use __proto__ const classes = Object.assign( Object.create(null), {Users, Orders} ); 访问正确的类。当然,请验证该类是否存在。


  

我尝试过

classes[className]
     

但这似乎不起作用。

在这种情况下,[className].query().where('orderNumber','123').fetch() 表示数组文字,因此[...]仅创建一个包含[className](在您的示例中为字符串)作为元素的数组。

答案 1 :(得分:0)

完全避免将变量转换为字符串。只需使用:

let className = Orders;
className.query().where('orderNumber','123').fetch()

如果通过API调用实例化该类,请使用简单的switch语句:

let class;
switch (apiCall.name) {
    case 'orders':
        class = Orders;
        break;
    case 'users':
        class = Users;
        break;
    default:
        throw 'Invalid API Call';
}

class.query().where('orderNumber','123').fetch()

答案 2 :(得分:0)

最简单的方法是访问eval(className).query().where('orderNumber','123').fetch(),但是如果您想将值作为实际的类进行检查,则可能应该实现switch或if-else-if来检查和分配className,并仅在实际存在。