0

だから私はこのプログラムを持っています。オブジェクトを動的に作成する方法を理解するのにしばらく時間がかかりました。他の統計に基づいています。とにかく、なぜこれが実際に機能するのか疑問に思っていました。各 td に対して 1 つのオブジェクトを作成します。たとえば、現在 100 個の td 要素があります。各 td の情報を分離し、tds id # に基づいてアクセスできるようにしたいと考えていました。それはうまくいきます。

オブジェクトが他のオブジェクトと同じようにアクセスできるのはなぜですか?

なぜそれが機能するのかという部分にちょっと戸惑っています。私はそれが笑であることを知っています。

とにかく、ここに私のコードがあります... /bodyの直前のhtmlドキュメントの最後に配置されています。

<script>
    (function (){
    var list = document.getElementsByTagName("td");
    var number = 0;
    var text = '';
    text += '<script>';
    text += 'var plots = {\r';

    while (number <= list.length - 1) {
        text += number + ' : {\rstamp : 0\r';
        if (number >= list.length - 1) {
            text += '}}\r';
            number++
        } else(text += '},\r');
        number++
    }
    text += '</\script>';
    document.write(text);
    })();
</script>

繰り返しますが、私が理解するのを手伝ってくれるなら、オブジェクトをハードコーディングしたかのようにこれらが機能するのはなぜですか???

基本的に、スクリプトを作成するスクリプトを作成しました...ちょっと奇妙です。

ところで \r は、コンソールでソース コードを見るときに読みやすくするためだけに存在します。他に理由はありません。もちろん、それらは必要ありません。

3dgoo が削除された理由 (function (){ がそこにあり、そこにあるはずである理由を知りたいです。そうしないと機能しません...ありがとう。

4

1 に答える 1

3

オブジェクトをハードコーディングしたかのようにこれらが機能するのはなぜですか???

これが機能する理由は、ブラウザがスクリプト タグとやり取りする方法と、ブラウザが JavaScript を解釈する方法にあります。

ブラウザーが script タグに遭遇すると、デフォルトの動作はその中のコードを実行することです。

これにより、強力で表現力豊かなことを行うことができますが、頭痛の主な原因になることもあります.

あなたがしていることは、本質的に、HTML 構造を表す基礎となるオブジェクトである DOM を変更することです。これに HTML を書き込んでいます (この場合は<script>タグ)。これにより、ブラウザーはコンテンツを適切にレンダリングします。ブラウザの動作は、<script>タグに遭遇したときにスクリプトを実行することであるため、javascript を実行します。JavaScript を実行すると、グローバル名前空間でアクセスできる「plot」という名前のグローバル変数が作成されます。

これにより、まったく同じことができますが、document.write は必要ありません。

var plot = (function () {
    var list = document.getElementsByTagName("td");

    var plots = {};

    for(var i = 0; i < list.length; ++i) {
      plots[i] = {'stamp': 0};    
    }

    return plots;
})();

このplunkerは、上記のコードのインタラクティブな例を示しています。script タグは body タグの中にあることに注意してください。

追加する編集、コメントから:

はい、JavaScript は実行時に解析されますが、DOM が再評価されると、新しい JavaScript が実行されます。既に実行されたコード、または既に発生したイベントは再度実行されません。

于 2013-06-03T04:19:15.967 に答える