찾다

 >  Q&A  >  본문

javascript - script.onload运行时,miniConsole指的是js文件中的对象,为什么不是html里miniConsole对象?

(代码简化自js设计模式与开发实践P99)
如下代码中,当F2触发后,执行的函数中的miniConsole指的是miniConsole.js中的对象,而不是html里miniConsole对象,为什么??

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
      
    </style>
</head>
<body>

<script type="text/javascript">
var miniConsole = (function(){
    var cache = [];
    var handler = function(ev){
        console.log("f2 triggle");
        if(ev.keyCode === 113){
            var script = document.createElement('script');
            script.onload = function(){
                for(var i=0,fn ; fn=cache[i++] ; ){
                    fn();
                }
            };
            script.src='miniConsole.js';
            document.getElementsByTagName('head')[0].appendChild(script);
            document.body.removeEventListener('keydown',handler); 
        }       
    }

    document.body.addEventListener('keydown',handler,false);
    return {
        log:function(){
            var args = arguments;
            cache.push(function(){
                console.log(miniConsole);
                return miniConsole.log.apply(miniConsole,args);
            })
        }
    }
})();


</script>
</body>
</html>

miniConsole.js

var miniConsole = {
    log:function(){
        console.log('lg');
    }
}
怪我咯怪我咯2775일 전672

모든 응답(2)나는 대답할 것이다

  • 阿神

    阿神2017-04-11 11:30:36

    因为onload事件触发时表示加载已经完成,此时miniConsole对象已经被重写了,之前的miniConsole对象是为了将执行用户输出的接口函数储存到var cache = []里面,之前的miniConsole对象已经自己执行了一次返回了一个匿名对象了,所以最后执行的对象是被重写的miniConsole对象

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-11 11:30:36

    今天正好也在看这本书的这一章节的这个代码

    회신하다
    0
  • 취소회신하다