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()またはなどのメソッドを使用すると自動的に行われます(6).toString()。ただし、データ型を調べて正しい変換を自分で選択しない限り、ボックス化された値を自動的に返す方法はわかりません(そうすることがベストプラクティスかどうかさえわかりません)。そして、それを行う場合は、プリミティブを適切に処理するように関数を変更することもできます。

さらに、それはあなたに何をもたらしますか?Stringオブジェクトを取得するとします。どのようなプロパティを列挙することを期待していますか?そのようなことについて私が知っている唯一のプロパティはプロパティではありませんが、ボックス化されたオブジェクトのプロトタイプのメソッド内でthis、スカラー値を返す参照を使用できます。

Number問題は、プロパティのような、またはプロパティを持ち、他のオブジェクトのように動作するオブジェクトを期待していることですStringが、そうではなく、そうではありません。

于 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 に答える