これは、拡張のために IE が Element プロトタイプを公開する (または公開しない) 方法によるものです。適切なブラウザーでdocument.body
は、DOM の一部であり、Element から派生するその他すべてのものは、Element.prototype
古い IE では、これは起こりません (組み込みの proto から継承しますが、読み取り専用です)。理由については、トピックを参照してください。IE (<8) で html 要素のプロトタイプを公開する方法は本当にありませんか?
要するにDOMです。ECMA 仕様ではありません。彼らはそれをしませんでした。彼らは今そうしています(完全にIE9以降)
MooTools - 原型的 - は、手動でアクセスする要素を拡張することでそれを回避します。これは、$ または要素コンストラクターまたは Slick (最初に要素に遭遇したとき) を介して行われます。
IE では、extend は要素ストレージ/uid をセットアップするだけでなく、Element.prototype から要素オブジェクト自体に expando プロパティへの参照をコピーします。
あなたがした場合:
$(document.body);
document.body.addClass('bar').adopt(new Element('div'));
これは機能します。一度拡張するだけで、すべてのメソッドが実際のオブジェクトにコピーされます。
将来的には、mootools はプロトタイプではなく (jquery のように) ラップされるため、すべての要素へのアクセスは $ 型の関数を介して行われます。
https://github.com/mootools/mootools-core/blob/master/Source/Element/Element.js#L268-275を参照してください