私は以前、HTML 要素の属性値を変更するとプロパティ値が変更されると考えていましたが、プロパティ値を変更しても属性は変更されません。なぜなら、属性は HTML で記述された青写真のようなものであり、プロパティは「ライブデータ」。
しかし、プレーンな JavaScript を使用して、プロパティ値を変更すると、属性値も変更されることが判明しました。一般に、プロパティ値は文字列、ブール値、オブジェクトなどの任意のデータ型にすることができますが、属性値は文字列のみにする必要があります。もう 1 つの違いは、属性名では大文字と小文字が区別されませんが、プロパティ名では大文字と小文字が区別されることです。(JavaScript Definitive Guide 6th edition、p. 375 - 376 で説明されているように)。
私はそれを試しました: http://jsfiddle.net/5nBM3/1/
http://jsfiddle.net/5nBM3/2/ではプロパティ値を設定し、http ://jsfiddle.net/5nBM3/3/では属性値を設定します。
以下を使用して属性値を設定するとします。
el.setAttribute("src", "http://i.imgur.com/4rE6FHV.gif");
明らかに、 の内部でsetAttribute()
、プロパティ値も調整できます。しかし、以下を使用してプロパティ値を設定すると:
el.src = "http://i.imgur.com/4rE6FHV.gif";
したがって、それを と同じように考えるとobj.x = 1
、他に何も変化しないはずです。上記の行により、属性値もどのように変更されるのでしょうか? によってですか
- オブジェクトの setter と getter は ECMA-5 (および一部の ECMA-3 実装) のように機能します。これは、オブジェクトがプロパティ
x
とのみを持つ場合、半径y
のセッターとゲッターを定義して、またはとして使用できる状況と似ています。そのため、半径を取得すると、 と を使用して計算する関数が呼び出され、設定すると、新しい に従って との値を調整する関数が呼び出されます。またはr
a = obj.r
obj.r = 3
x
y
r
x
y
r
- 属性がプロパティ値の変化を観察し、プロパティが属性値の変化を観察するオブザーバーモデル、または
- クライアント側の JavaScript がプロパティと属性の間の値の同等性を常に維持することは、単なるブラック ボックスまたは「魔法」と考えることができますか?