【JavaScript上級テクニック】改竄防止対象+高級タイマー

3741 ワード

どのオブジェクトも同じ環境で実行されるコードの修正が可能なため、開発者は意外にも他人のコードを修正したり、互換性のない機能で元のオブジェクトを書き換えたりすることがあります.改竄防止はこの問題を解決する方法です.
一、改竄防止
1、拡張不可オブジェクト
Object.prevent Extensions():オブジェクトに新しい属性と方法を追加できませんでした.Object.isExtensioble():オブジェクトが拡張可能かどうかを決定する.        対象にメンバーを追加することはできませんが、既存のメンバーは影響を受けず、既存のメンバーを修正して削除することができます.
2、密封の対象
Object.seal():対象を密封対象に設定し、密封対象を拡張できないし、既存の属性と方法を削除することもできないが、属性はObject.isSealedを変更できます.
3、凍結の対象
Object.freeze():対象を凍結対象に設定し、凍結対象は拡張できず、密封されているものであり、対象属性はObject.isFrozen()を変更できません.
二、高級タイマー
タイマーに関しては、指定された時間間隔は、いつコードが実行されるかではなく、いつタイマーのコードをキューに追加するかを示しています.
まず、setTimeout()とset Interval():Set Intervalを使って、遅延関数setTimeoutを設定するのは似ています.setTimeoutを使って、しばらくの時間を延ばしてから、ある操作を行います.set Intervalは指定された時間を過ぎるごとにコードを実行させることができます.setTimeout(「function」、time):IDを返して、このタイマーをクリアすることができます.setInterval(「function」、time):一つのIDを返して、clear Interval()のパラメータとします.Set Intervalは自動的に繰り返されます.set Timeoutは重複しません.
1、繰り返しタイマー
set Interval()は二つの問題があります.(1)ある間隔はスキップされます.(2)複数のタイマのコード実行間の間隔は、予想よりも小さいかもしれない.解決方法:チェーン式呼び出しsetTimeout()は、関数が実行されるたびに新しいタイマーを作成します.このように前のタイマーコードが実行される前に、列に新しいタイマーコードを挿入しません.確実な間隔がないようにします.
setTimeout(function(){
    //code
    setTimeout(arguments.callee,interval)
},interval)
2、配列ブロック
スクリプトが長時間実行される問題は、(1)長すぎる/深すぎるネストの関数呼び出し(2)による大量処理のサイクルが、処理が同期完了する必要がなく、データも順序完了する必要がない場合、配列ブロックの方法を用いて、タイマーでループを分離することができるからです.
アレイブロックの基本的な考え方:処理する項目のためにキューを作成し、タイマーを使って次の処理する項目を取り出して処理し、次のタイマーを設定します.
function arrayChunk (array,process,context,delay) {
    if(delay) {
        interval = delay;
    } else {
        interval = 100;
    }
    setTimeout(function () {
        var item = array.shift();//       
        process.call(context,item);//       

        if (array.length > 0) {//     ,         
            setTimeout(arguments.callee,interval);
        }
    },interval);
}
var data = ["Hello","I","am","vickygu",",","I","am","so","glad","today"];
    function printValue (item) {
        var arrayDiv = document.getElementById("arrayDiv");
        arrayDiv.innerHTML += item + " ";
    }
    arrayChunk(data,printValue,null,200);
200 msごとに単語が印刷されます.
3、関数の流れ
前のブログを見ました.