面试题实际应用

function Foo() {//这是一个方法,也可以是一个没有实例的类

    getName = function(){ alert(1); };//这是foo方法里的一个方法,只能在方法里访问得到,别的地方都访问不到。

    return this;//这里返回的是全局window对象,并不是foo本身的实例。

}

//

//console.log(Foo());//你这里是执行了这个方法,里面返回了一个this,也就是window对象。

Foo.getName = function() { alert(2); };//这里是在foo方法上加了方法getname,也就是把foo方法当成对象了。

Foo.prototype.getName = function(){ alert(3); };//这里的意思是在foo所有的实例对象上加了个方法getnanme,和上面的不一样。

var getName = function() { alert(4); };//这是是全局的var方法,this访问不到,只有直接getname才能执行。

function getName(){ alert(5); }//这是一个全局的this方法,this也就是window访问的到。

//

Foo.getName(); //这个很简单吧,是2

getName(); //这个是4

Foo().getName(); // foo()返回this,也就是window,是5

this.getName(); // 这个也是5

new Foo.getName(); // 这个先会执行foo.getname,返回的是一个function方法,new foo.getname 就会返回方法的实例,所以里面的内容也会被执行,也会弹出2

new Foo().getName(); // 这里会先实例foo,foo的实例再执行getname方法,也就是Foo.prototype.getName。所以3

new new Foo().getName(); // 这里会先执行new Foo()得到foo的实例,再获得到getname方法,也就是new foo().getname 得到一个方法,然后又被new,这时候getname被执行也就是弹出了3

记住,new (这里不管是什么都先执行)()

new Foo.getName() 先执行foo.getname

new Foo().getName() 先执行foo

new new Foo().getName()先执行foo,然后执行 new foo().getname

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,806评论 18 399
  • 最近在网上看了一道有关前端的面试题感觉很不错,就在这里分享给大家。 题目: function Foo() { g...
    穿越人海遇见你阅读 1,007评论 0 12
  • Github原文 题目 这几天面试上几次碰上这道经典的题目,特地从头到尾来分析一次答案,这道题的经典之处在于它综合...
    秋风喵阅读 912评论 0 19
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,169评论 19 139
  • HTML HTML5标签 媒体查询head部分写法 Doctype作用? 严格模式与混杂模式如何区分?它们有何意义...
    Mayo_阅读 676评论 0 8