ブラウザのドキュメントエレメントは拡張できない

<< 戻る   トップ >>

David Flanagan の「JavaScript 第5版」からの重要情報。「9.2 プロトタイプと継承」P.157より引用。

 ここで紹介したテクニックが使えるのは、コア言語の組み込みクラスだけです。JavaScript が Webブラウザや Java アプリケーション等に埋め込まれると Webブラウザのドキュメントなどを表す「ホストオブジェクト」が新たに追加されます。このようなホストオブジェクトはコンストラクタやプロトタイプを持たないのが普通なので、機能を拡張できません。

「テクニック」とは、String や Date などの組み込みクラスのプロトタイプを使ってプロパティ・メソッドを拡張する「常用しない方が好ましい」手法である。

これまで、例えば HTMLDivELement 「クラス」を拡張するコードを試みて失敗してきたが、「何か間違った」わけではなく仕様上拡張できない、ということなのだ。したがって、「鴨乃嘴南蛮改良計画」の項番 3.「JavaScript プロトタイプ拡張をもう一度勉強。よい資料も出てきたので、HTMLElement を拡張したオブジェクトの作成を試みる。」はよい資料故に「不可能」ということがわかったのである。結論は出たものの、JavaScript の「クラス」については勉強を継続する。

参考までに、組み込みクラス Array と HTMLDivElement の違いを示す。

var array = new Array();

document.writeln( "array.constructor= "+ array.constructor + "<br>>" );
document.writeln( "array.constructor.prototype= "+ array.constructor.prototype + "<br/>" );

var element = document.createElement( "div" );
document.writeln( "element.conctructor=" + element.constructor + "<br>>" );
document.writeln( "element.conctructor.prototype=" + element.constructor.prototype + "<br>>" );

実行結果

array.constructor= function Array() { [native code] }
array.constructor.prototype=
element.conctructor=[object HTMLDivElement]
element.conctructor.prototype=[xpconnect wrapped native prototype]

作成: 2010-10-25 16:05:38.0更新: 2010-10-25 16:47:33.0
http://museo-anonimo.jp/nanban/?id=926,http://museo-anonimo.jp/nanban/tr/926