我想要创建一个接收对象名称并输出其所有属性的Web表单。为此,我写了一段代码:
var html5form = document.getElementsByClassName("html5_form");
html5form[0].onsubmit = function (e) {
var val = e.target.querySelector("input[name=obj]").value,
obj = window[val],
enumObj = new obj();
for (prop in enumObj) {
console.log(prop);
}
return false;
}
我用对象构造函数创建了一个datalist并将其附加到输入字段。但我实际上是迭代对象实例,而不是构造函数。上面提到的代码仅在我输入DataView和ArrayBuffer等构造函数时才有效,并且不能处理Array,Number等。我的代码出了什么问题?我试过调试,但没有结果。
答案 0 :(得分:1)
JavaScript没有像你想象的那样拥有标量/基元的对象。有拳击,但这是关于它。
当您在其上使用方法(例如'text'.method()
或(6).toString()
)时,会自动将字符串基元插入字符串对象。但是,我知道无法在不检查数据类型的情况下自动返回盒装值,然后自己选择正确的转换(我甚至不确定这样做是否是最佳实践)。而且,如果您要这样做,您也可以改变您的功能以正确处理原语。
另外,它能带给你什么?假设你得到一个String对象。你期望列举哪些属性?我知道的唯一属性不是属性,而是在盒装对象原型的方法中,您可以使用this
引用 - 它返回标量值。
问题在于,您希望像Number
或String
这样的对象具有属性并像其他对象一样运行,但它们不会也不会。
答案 1 :(得分:0)
不确定这是否是您正在尝试做的事情
window.myObject = function(){};
var objectName = 'myObject';
var objectInstance = new window[objectName];
objectInstance
现在包含myObject
另一方面,如果您的对象只是一个对象文字,则不应使用new
关键字。
window.myObject = {};
var objectName = 'myObject';
var objectReference = window[objectName];