天天看點

Angular應用裡setTimeout被如何被monkey patched的

Angular應用裡setTimeout被如何被monkey patched的
Angular應用裡setTimeout被如何被monkey patched的
Angular應用裡setTimeout被如何被monkey patched的
Zone.__load_patch('timers', (global) => {
        const set = 'set';
        const clear = 'clear';
        patchTimer(global, set, clear, 'Timeout');
        patchTimer(global, set, clear, 'Interval');
        patchTimer(global, set, clear, 'Immediate');
    });
    Zone.__load_patch('requestAnimationFrame', (global) => {
        patchTimer(global, 'request', 'cancel', 'AnimationFrame');
        patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame');
        patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame');
    });
    Zone.__load_patch('blocking', (global, Zone) => {
        const blockingMethods = ['alert', 'prompt', 'confirm'];
        for (let i = 0; i < blockingMethods.length; i++) {
            const name = blockingMethods[i];
            patchMethod(global, name, (delegate, symbol, name) => {
                return function (s, args) {
                    return Zone.current.run(delegate, global, args, name);
                };
            });
        }
    });
      

然後我在Angular應用裡調用setTimeout時,執行的實際上是被monkey patched之後的版本,即代碼1449行的函數體 patchDelegate, 一個委托函數:

Angular應用裡setTimeout被如何被monkey patched的
Angular應用裡setTimeout被如何被monkey patched的

繼續閱讀