二二、函数调用模式案例

来源:互联网 发布:网络监控技术员 编辑:程序博客网 时间:2024/06/06 19:34

<script>   function Foo(){      getName = function(){ alert(1); };      return this;   }   Foo.getName = function(){ alert(2); };   Foo.prototype.getName = function(){ alert(3); };   var getName = function(){ alert(4); };     function getName(){        alert(5);    }      Foo.getName();                getName();                Foo().getName();           getName();                         new Foo.getName();            new Foo().getName();            new new Foo().getName();    </script>

 上文中的输出结果为:

<script>   // 1, 读取代码, 然后预解析, 得到 Foo 函数与 getName 函数      function Foo(){      getName = function(){ alert(1); };      return this;   }   function getName(){       alert(5);    }   Foo.getName = function(){ alert(2); };   Foo.prototype.getName = function(){ alert(3); };   var getName = function(){ alert(4); };   // 覆盖前面的 getName    function getName(){        alert(5);    }      Foo.getName();             // = 2       getName();                 // = 4   Foo().getName();           // 首先是 函数调用模式, 因此返回 this  window 全局对象                                 // 同时给 getName 重新赋值, 在函数 Foo 中没有 getName 的声明                                 // 因此修改的是外面的 getName                               // 所以最终是 全局的 window 调用 getName 即 就是 getName 的函数调用模式                                 // = 1   getName();                 // = 1          new Foo.getName();         // = 2    new Foo().getName();       // = 3      new new Foo().getName();   // = 3   // 如果不清楚, 猜测有两种可能   // new ( new Foo() ).getName()   // new ( new Foo().getName() ) // 不可能是这样的结合形式</script>

0 0
原创粉丝点击