1

のプロトタイプに新しいプロパティを追加し、HTMLElementそのデフォルト値を ' {}' (空のオブジェクト) にした場合:

Object.defineProperty(HTMLElement.prototype, 'customObject', 
{ configurable: true, enumerable: true, writeable: true, value: {} });

今、私は新しいものを作成しますdiv(これもですHTMLElement):

var e = document.createElement('div');

customObjectof にプロパティを割り当てますe

e.customObject.prop = "bla";

警告すると、目的の値が表示されます。

alert(e.customObject.prop); // Displays 'bla'.

ここで、新しい別のdiv要素を作成します。

var d = document.createElement('div');

これでプロパティdが空になるはずですよね?customObject

ただし、警告すると:

alert (d.customObject.prop);

この予期しない結果が得られます。

bla

どうして?新しい要素を作成するとき、HTMLElement.prototype の「空白」のインスタンスが必要ではありませんか?

( jsfiddle: http://jsfiddle.net/5pgr38mb/ )

編集:ディープ クローニング (cloneNode(true)) で動作するソリューション 探しています。意味 - カスタム オブジェクトが要素またはその子のいずれかにプロパティを持っている場合、その要素または子は複製されたインスタンスでその値を保持します (これは「ネイティブ」HTMLElement 属性の通常の動作です)。

4

2 に答える 2