2017-03-09 15 views
-2

なぜElement instanceof Nodeがfalseを返すのかわかりません。なぜなら、nodeTypeが1の要素はすべて特別なNode型なのでです。`Element instanceof Node`がfalseを返す理由

以下私はMDNから求めたものである:

次のインターフェイスすべてのノードから、そのメソッドとプロパティを継承する:文書、要素、CharacterDataを(テキスト、コメント、およびのCDATASection継承)、処理命令、ドキュメント・、のDocumentType、表記法、エンティティ、実体参照

質問2:DOM内の任意の要素があり、両方のinstanceof要素とのinstanceof Node.Theコードは以下の通りです理由:

var div = document.querySelector("div"); 
div instanceof Node;//true 
div instanceof Element;//true 
Element instancof Node;//false 
+2

何かの何かが**インスタンス**であるかどうかを 'instanceof'がテストするので。 'Element'はインスタンスではありません。それはコンストラクタです。 – Li357

+2

'Element instanceof Function'が真となります。クラスが互いに継承しているかどうかを確認するには、[here](http:// stackoverflow。com/a/35921495/1048572) – Bergi

+0

ブラウザは必ずしもプロトタイプの継承を実装する必要はありません。 – RobG

答えて

1

Elementは、コンストラクタであるためFunctionです。

Element.prototypeは、Nodeです。

nodeTypeが1の要素はすべて特別なNode型であるためです。 ElementNodeないようElement.nodeTypeは、undefinedであること

注意してください。

DOMの要素が要素とノードの両方のインスタンスになるのはなぜですか?

プロトタイプチェーンは、基本的にクラスを定義し、定義されたクラスを拡張することを可能にします。

function Foo() {...} 

Foo

function Bar() {...} 

のクラスとみなすことができるものを作成するBar

Foo.prototype = new Bar(...); 

のクラスはFooBarを拡張関係を作成すると考えることができるものを作成します。

var f = new Foo(); 

fFooBarのインスタンスのインスタンスです:あなたはFooインスタンスを作成する場合

、このコードを使用します。

同じ階層がとNodeに適用されます。ElementNodeです。

+0

DOM標準では、最新のブラウザでECMAScriptと一貫したコンストラクタとプロトタイプの継承を使用して実装されている一連のインタフェース([interface ** Node **](https://dom.spec.whatwg.org/#node)など)を記述しています。しかし、インタフェース*は、ホストがjavascriptをサポートしていても(例えば、少なくともバージョン7までのIEなど)、グローバルな* Element *オブジェクトが存在しない場合でも、他の方法で実装され、 ) – RobG

関連する問題