0

我有一个想法,即制作一个接收对象名称并输出其所有属性的 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;
}

我用对象构造函数制作了一个数据列表并将其附加到输入字段。但我实际上是在迭代对象实例,而不是构造函数。上面提到的代码仅在我输入 DataView 和 ArrayBuffer 等构造函数时才有效,并且不适用于 Array、Number 等。我的代码有什么问题?我试过调试,但没有结果。

4

2 回答 2

1

JavaScript 没有您所想的标量/基元对象。有拳击,但仅此而已。

例如,当您在其上使用方法时,会自动将字符串原语装箱到字符串对象,例如'text'.method()or (6).toString()。但是,我知道如果不检查数据类型然后自己选择正确的转换(我什至不确定这样做是否是最佳做法),就无法自动返回装箱值。而且,如果您要这样做,您也可以更改您的函数以正确处理原语。

另外,它会给你带来什么?假设你得到一个 String 对象。您希望在其上列举哪些属性?对于此类事情,我知道的唯一属性不是属性,而是在装箱对象原型的方法中,您可以使用this引用——它返回标量值。

问题是您期望对象像NumberString具有属性并像其他对象一样行事,但它们没有也不是。

于 2013-01-13T09:00:58.127 回答
0

不确定这是否是你想要做的

window.myObject = function(){};

var objectName = 'myObject';
var objectInstance = new window[objectName];

objectInstance现在包含一个实例myObject

另一方面,如果您的对象只是一个对象文字,则不应使用new关键字。

window.myObject = {};

var objectName = 'myObject';
var objectReference = window[objectName];
于 2013-01-13T08:55:00.660 回答