0
点赞
收藏
分享

微信扫一扫

关于函数预解析、构造函数、原型上的方法的一道经典面试题

小时候是个乖乖 2022-03-31 阅读 26
function Foo() {
        getNum = function () { console.log(1) };
        this.getNum = function () { console.log(2) };
        }
        Foo.prototype.getNum = function () { console.log(3) };
        var getNum = function () { console.log(4) };
        function getNum() { console.log(5); }
        getNum();
        var f = new Foo();
        f.getNum();

先搞清楚2个概念:

function Foo() {
         getNum = function () { console.log(1) };
         this.getNum = function () { console.log(2) };
        }
        Foo.prototype.getNum = function () { console.log(3) };
        
        // 1.先预解析全局的变量“var getNum”和函数“function getNum() {console.log(5) }”
       //2.预解析完毕之后,getNum最终的值为function getNum() {console.log(5) }。
        var getNum = function () { console.log(4) }; 
        function getNum() { console.log(5); }
        
        // 3.代码执行阶段,变量getNum进行赋值,所以全局下的getNum最终值为function() { console.log(4); },调用getNum输出结果为4。
        getNum();
        
        //4.代码继续往下执行,构造函数Foo实例化,实例对象f自身会继承构造函数内使用”this.”定义的方法getNum,即function() { console.log(2); }。
        var f = new Foo();
        // 5.f的原型会指向构造函数的原型对象,即function() { console.log(3); }。f.getNum()调用同名方法时,优先调用自身的方法,所以结果输出2。
        f.getNum();

在这里插入图片描述

举报

相关推荐

0 条评论