一道js面试题

小精豆2016
小精豆2016 发布于 2016-10-20 21:47:06 浏览:858 类型:原创 - 随笔 分类:JavaScript - 面试题 二维码: 作者原创 版权保护
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();    // 2;
    getName();       // 4;
    Foo().getName();   // 1;
    getName();         //  1
    new Foo.getName();  // 2
    new Foo().getName();   // 3;
    new new Foo().getName()  // 3

面试中遇到的一道js题,感觉考察的东西还是挺多的,不过目前处于懵逼状态,希望有大牛来给讲解一下
z
给个赞 2 人点赞
收藏 3 人收藏
评论 已有 8 条评论;以下用户言论只代表其个人观点,不代表 前端网(QDFuns) 的观点或立场。
登录 以后才能发表评论
最新评论
hugeannex
hugeannex2016-10-21 15:03:348F
emoticon //@小精豆2016:抱住大神大腿emoticon //@hugeannex:Foo.getName();  相当于所谓的静态方法,调用的是Foo.getName=这一方法,所以是2
getName();    全局方法,编释顺序决定,var getName覆盖了函数声明,所以是4
Foo().getName()   用Foo当函数调用,函数内有全局的getName,用var getName给重写了,所以是1
getName();   因为上一条,所以还是1
new Foo.getName()  把静态方法getName当构造函数,执行了静态的getName,所以是2
new Foo().getName()  这是正常的对象化方法,调用了自身的prototype.getName,所以是3
最后这个,不太清楚是干嘛,但最终会执行上一条,所以还是3. //@小精豆2016:不知道,最近做的面试题,其他的几个能不能具体的讲讲啊emoticon //@hugeannex:就最后一句new new Foo不知道要干嘛。但结果是能想到的,其他的都懂。。。。最后一句是乱写拿来用的?
举报 支持 (0) 回复 (0)
小精豆2016
小精豆20162016-10-21 14:39:537F
抱住大神大腿emoticon //@hugeannex:Foo.getName();  相当于所谓的静态方法,调用的是Foo.getName=这一方法,所以是2
getName();    全局方法,编释顺序决定,var getName覆盖了函数声明,所以是4
Foo().getName()   用Foo当函数调用,函数内有全局的getName,用var getName给重写了,所以是1
getName();   因为上一条,所以还是1
new Foo.getName()  把静态方法getName当构造函数,执行了静态的getName,所以是2
new Foo().getName()  这是正常的对象化方法,调用了自身的prototype.getName,所以是3
最后这个,不太清楚是干嘛,但最终会执行上一条,所以还是3. //@小精豆2016:不知道,最近做的面试题,其他的几个能不能具体的讲讲啊emoticon //@hugeannex:就最后一句new new Foo不知道要干嘛。但结果是能想到的,其他的都懂。。。。最后一句是乱写拿来用的?
举报 支持 (0) 回复 (1)
hugeannex
hugeannex2016-10-21 10:16:396F
Foo.getName();  相当于所谓的静态方法,调用的是Foo.getName=这一方法,所以是2
getName();    全局方法,编释顺序决定,var getName覆盖了函数声明,所以是4
Foo().getName()   用Foo当函数调用,函数内有全局的getName,用var getName给重写了,所以是1
getName();   因为上一条,所以还是1
new Foo.getName()  把静态方法getName当构造函数,执行了静态的getName,所以是2
new Foo().getName()  这是正常的对象化方法,调用了自身的prototype.getName,所以是3
最后这个,不太清楚是干嘛,但最终会执行上一条,所以还是3. //@小精豆2016:不知道,最近做的面试题,其他的几个能不能具体的讲讲啊emoticon //@hugeannex:就最后一句new new Foo不知道要干嘛。但结果是能想到的,其他的都懂。。。。最后一句是乱写拿来用的?
举报 支持 (0) 回复 (1)
小精豆2016
小精豆20162016-10-21 10:05:065F
不知道,最近做的面试题,其他的几个能不能具体的讲讲啊emoticon //@hugeannex:就最后一句new new Foo不知道要干嘛。但结果是能想到的,其他的都懂。。。。最后一句是乱写拿来用的?
举报 支持 (0) 回复 (1)
hugeannex
hugeannex2016-10-21 10:00:534F
就最后一句new new Foo不知道要干嘛。但结果是能想到的,其他的都懂。。。。最后一句是乱写拿来用的?
举报 支持 (0) 回复 (1)
1206189299
12061892992016-10-21 09:41:203F
一脸懵逼
举报 支持 (0) 回复 (0)
小精豆2016
小精豆20162016-10-21 09:33:132F
肯定不是运算符,我找人问了下是考察变量提升和原型链的。。。。 //@chei:运算符优先级么
举报 支持 (0) 回复 (0)
chei
chei2016-10-21 00:39:541F
运算符优先级么
举报 支持 (0) 回复 (1)
小精豆2016 小精豆2016 作者

作者最新