51

javascript の expando オブジェクトとは何ですか?

どのような目的でこれが必要ですか? 完全な例をいただければ幸いです

ここで 1 つの記事を見つけましたJavascript: The red-headed stepchild of web development

4

4 に答える 4

43

JavaScript では、すべてのオブジェクトが expando オブジェクトです。これが意味することは、この記事で説明されているように、プロパティ1にアクセスしようとすると、自動的に作成されるということです。

var myObj = {}; // completely empty object
myObj.myProp = 'value';

値を割り当てた瞬間myPropに、プロパティmyPropは動的に作成されますが、以前は存在しませんでした。C# などの他の多くの言語では、これは通常は不可能です (実際、C# では expando オブジェクトのサポートも有効になっていますが、それは重要ではありません)。C# で通常のクラスのプロパティにアクセスするには、実際にこのプロパティがあることをクラスで指定する必要があります。

1まったく正しくありません。明確にするために、以下の npup のコメントを参照してください。

于 2010-03-24T07:39:18.283 に答える
10

プリミティブ型 (string、number、boolean) 以外はすべてオブジェクトであり、Key:values 構造をサポートします。プロパティ(キー)は、ドット表記と角括弧を使用してアクセスおよび設定できます。

var myObj = {};   
myObj.myProp1 = 'value1'; //works, an expando property   
myObj[myProp2] = 'value2'; // doesn't work, myProp2 is an undefined name.
myObj['myProp2'] = 'value2'; // works  , an expando property   
myObj[2010]= 'value'; //note the key is number, still works, an expando property??   
myObj.2010 = 'value'; // FAILS. to use dot notation, key must be a string
于 2011-01-19T11:58:17.923 に答える
4

(要素にアクセスする唯一の方法として) document.all を使用する 2007 年に書かれた記事ですか? それは大きな赤い旗です。

「オブジェクトにプロパティを追加できる」という流行語でドレスアップしているだけです。

そうしないとデータを保存できず、JavaScript が役に立たない言語になってしまうからです。

(すべてが配列ですか? いいえ、そうではありません。そして、hasOwnProperty ラッパーなしでオブジェクトを反復処理します。それは安全ではありません。記事から離れてください。役に立たないよりも悪いです)

于 2010-03-24T07:38:28.533 に答える
4

JavaScript turns elements with specific IDs of names into expandos of the returned DOM object. It is explained here.

于 2011-03-02T16:58:18.077 に答える