2016-07-02 6 views
0

は、私たちは、このようなHTML文書を持ってquestion.Imagineを持っています。Chromeの

<html> 
    <head> 
    </head> 
    <body> 
    <p id="1">Hi</p> 
    </body> 
</html> 

私はdocument.getElementById("1").__proto__;を書いています - 私はHTMLParagraphElementオブジェクトを持っていることがありますpオブジェクトのプロトタイプのチェーン内の最初のプロトタイプオブジェクト(HTMLParagraphElement - > HTMLElement - > Element - > Node - > ...)Nodeオブジェクトがこのチェーンに配置されているので、そのプロパティとメソッドはすべてHTMLParagraphElementオブジェクトのために利用可能です。そして、私が書いているときにdocument.getElementById("1").__proto__.parentNode;ブラウザは私に与えます

未知の型エラー:不正な呼び出し。 それはどういう意味ですか?そして、このHTMLParagraphElementオブジェクトが正確にどこにBOMに接続されているかをどのように知ることができますか?たとえば、var x = 10と書いているとします。 - オブジェクトであり、ウィンドウオブジェクト(window.x;)のルートに接続されています。 BOMの構造を明確に理解したい。

+0

私は '.parentNode'が/をES6ゲッターとして使うと思います。 '.parentNode'を読むだけで変数にアクセスするのではなく、getter関数を呼び出して結果を返します。その機能の中には、ブラウザが許さないものがあります。 – RainingChain

+0

[HTMLParagraphElementのようなプロトタイプオブジェクトがBOMツリーに配置されている場所は?](http://stackoverflow.com/questions/38152158/where-the-prototype-objects-like-htmlparagraphelement-are-laying-in- the-bom-tree) – puelo

答えて

0

あなたは要素のはparentNodeにアクセスする必要がある場合は、あなたが直接実行する必要があります。

document.getElementById("1").parentNode 

上の行は<body>ノードへの参照を返すとDOMをトラバースに適しているでしょう。

そうでない場合は、

document.getElementById("1").__proto__.parentNode 

は、あなたが要素ではなく、要素のタイプではないクラス/タイプHTMLParagraphElementのはparentNodeを取得しようとしていることを意味する:要素の種類はparentNodesを持っていません。 __proto__を行うには、より適切な

何かが次のようになります。

document.getElementById("1").__proto__.__proto__ 

これは持っていることは非常に有用ではありませんが、上記の行は、あなたにHtmlElementクラスを与えるだろう。

var xについては、javascriptで定義されている変数はDOMには付けられておらず、グローバル変数はwindowに追加されています。 windowwindow.documentによってDOMに接続されています。これは簡潔にはdocument....コマンドを入力するだけでアクセスできます。

+0

はい、このプロパティはプロパティで定義されているため、プロトタイプオブジェクトHTMLParagraphElementのparentNodeを取得します。私はそれが正常に動作する必要があるが、それが定義されていると思うが、 "Uncaught TypeError:Illegal invocation"を与える。私はBOMの構造についてもっと知りたいです – Dimon

+0

この答えをお寄せいただきありがとうございます – Dimon

+0

@Damon、 'HTMLParagraphElement.prototype.parentNode'をあなたのコードに記述して実行するのは意味がありません。 'parentNode'は要素型の組み込み関数で、' .parentNode() 'を実行せずに自身を評価しようとします。 '.parentNode'にアクセスしようとすると' HTMLParagraphElement.prototype'がDOMツリーにないので失敗します。 'document.getElementById(" 1 ")はDOMツリーにあり、' HTMLParagraphElement'はそうではありません。 'HTMLParagraphElement'は' windowにあるjavascript型のラッパーとしてのみ存在します。HTMLParagraphElement'で、DOM内にはありません。 –

関連する問題