问题描述
下午好,开发人员
我目前正在尝试开发一个函数,该函数根据它作为参数接收的字符串的值动态实例化业务对象。我知道这可以像以前一样在JavaScript中完成,并且可以肯定的是,在SAPUI5应用程序中遇到此问题后,我什至在Visual Studio Code中再次对其进行了测试。我函数的代码看起来像这样:
createObject: function (sObject) {
var newObject = new this[sObject]();
// var newObject = new [sObject](); I also tried this way.
};
为了测试此功能,sObject字符串当前包含硬编码值“ Order”,并且我将我的Order.js对象导入文件中,在此文件中我试图动态实例化此对象。无论我尝试什么,在调试代码时都会不断收到此错误:
TypeError: this[sObject] is not a constructor
我想知道你们中的某些人以前是否曾尝试过类似的尝试,并且可能能够指出正确的方向。即使我有解决此问题的方法,但由于我打算在几种不同的情况下使用这种方法,所以我学会了如何动态地进行此操作也非常好。我期待着您的来信!
解决方法
从字符串中实例化对象,然后从用户可以提供的参数中实例化它,这是一种非常不安全的做法。如果对象有限,那么使用较大的switch语句会更安全。
switch(name) {
"objA": return new ObjA();
}