JavaScript:如何创建一个具有字符串名称的对象
JavaScript: How to create an object having its string name
我在客户端中声明了一个命名空间和类。事实上,我在几个名称空间中声明了一大堆类。当我在页面加载时从服务器上获得一个包含"点"namespace.class名称的字符串时,我只需要获得其中一个的实例。
目前我使用eval
来实现这一点,但这会导致内存泄漏,因此我正试图找到一种替代方法,通过只知道声明对象的名称来实例化它。像var obj = "myNamespace.myObjectName"();
这样的东西显然是行不通的。
如果我有一个对象名称作为字符串变量,我可以使用eval()
函数来创建该对象的实例:
window["myNamespace"] = {};
myNamespace.myObjectName = function() { /* blah */ };
var name = "myNamespace.myObjectName";
var obj = eval("new " + name + "()");
但由于几个原因,我不想/不能使用eval
。如何在不使用eval
的情况下按名称创建对象?
听起来您无法控制name
变量的内容,因此您只能将.
作为字符串的一部分。
因此,可以将字符串.split()
分为其名称部分,并使用.reduce()
从基础对象遍历。
window["myNamespace"] = {};
myNamespace.myObjectName = function() {
this.foo = "bar"
};
var name = "myNamespace.myObjectName";
var obj = newObjectFromStringPath(name);
document.querySelector("pre").textContent = JSON.stringify(obj, null, 4);
function newObjectFromStringPath(path, base) {
return new (name.split(".").reduce(function(obj, name) {
return obj != null ? obj[name] : null
}, base || window))
}
<pre></pre>
newObjectFromStringPath
被编码为专门针对一个函数并将其作为构造函数调用。只需删除该函数中的new
,就可以轻松地获取任何值。
相关文章:
- 如何使用jquery读取对象字符串
- 用javascript修复这个JSON对象字符串最干净的方法是什么
- Javascript对象字符串值-在应该隐藏的时候呈现的HTML代码
- 在Nodejs中将数组转换为类似子的对象字符串
- 对象字符串转换为JSON(抛出错误)
- 如何将事件对象字符串化
- 如何在 JavaScript 中将 JSON 对象字符串化为负零
- 将 JSON 对象字符串数组转换为 JS 对象数组
- 如何在角度转换请求中将对象字符串转换为 JSON 对象
- 删除开头的双引号&结束于JSON对象/字符串或Java脚本变量
- 将json对象字符串转换为值
- 如何迭代json对象字符串
- 将数组列表转换为json对象字符串
- 如何将继承的对象字符串化为JSON
- 如何按对象字符串值之一对对象数组进行数字排序
- 解析日期对象字符串并获取以毫秒为单位的时间
- 如何在javascript中解析javascript对象字符串
- Javascript类对象字符串到对象
- 从使用.data()添加的对象字符串中获取值
- 如何在javascript中添加一个函数变量到对象字符串