-1

簡単なhtmlを書きます:

<!DOCTYPE html>
<html>
<body>
   <div>Hi</div>
</body>
</html>

そして、Google Chrome のこの簡単なスクリプト:

var div = document.querySelector('div');
console.log(div.parentNode.innerHTML);
console.log("%O",div);

次に、コンソールが innerHTML とオブジェクトを出力します。

オブジェクトを拡張すると、parentNode の値が null であることがわかります。

parentNode がノード オブジェクトのプロパティの 1 つであることは知っていますが、この変数の中身は何ですか?

それはポインターですか?サブオブジェクト? 関数?

サブオブジェクトの場合、オブジェクトを別のオブジェクト内にメンバー変数として格納するためにメモリを浪費しますか?

4

2 に答える 2

3

JavaScript には「ポインター」または「サブオブジェクト」がありません。すべての「オブジェクト」変数 (またはプロパティ) は、オブジェクトへの参照として見えないように扱われます。

var a = 1;    // a contains the value "1"
var b = {};   // b contains a reference to the newly created empty object {}

この場合、プロパティは、 を含むオブジェクト.parentNodeへの単なる参照です。HTMLBodyElement<div>

詳しくは:

これらの参照は C のポインターに似ていますが、完全に不透明です。参照の意味のあるを取得することはできません。ただし、演​​算子を使用して参照を比較===し、 2 つの参照が実際に同じオブジェクトを参照しているかどうかを確認できます。

すべてのオブジェクトは参照カウントされます。これ以上参照がない場合 (つまり、スコープ内の変数またはプロパティがそれを指していない場合)、オブジェクトはガベージ コレクションされる可能性があります。

オブジェクトを関数に渡すとき、実際には参照のコピーを渡しています。つまり、関数内でそのオブジェクトのプロパティにアクセスしてそのオブジェクトを変更できますが、オブジェクトへの呼び出し元の参照を変更することはできません。

于 2013-10-30T16:23:28.947 に答える
1

JavaScript には「ポインタ」や「サブオブジェクト」という概念がありません。

の値はparentNode、プロパティが設定されているオブジェクトの親である DOM ノードを表すオブジェクトです (存在する場合、存在しない場合はnull代わりになります)。

JS のオブジェクトであるすべての値と同様に、これは参照として扱われます。

于 2013-10-30T16:22:56.540 に答える