this指向,实例方法、静态方法以及原型方法

31 阅读1分钟

前几天面试小米日常前端实习的时候,被这样一道题难倒了

知识点:

  • 实例方法:构造函数内this携带的方法,仅实例对象可访问。如obj.a()
  • 静态方法:在构造函数身上添加的方法,仅构造函数可访问。如Foo.a()(log4那个)
  • 原型方法:构造函数和实例对象均可访问。如Foo.prototype.a()

图片内正确答案为:4、2、1 思路:

  1. Foo.a()是静态方法,Foo函数内也有Foo.a方法(优先级更高),但因为Foo构造函数未被调用,因此输出4
  2. 初始化实例对象obj
  3. obj.a()此时有两种选择,一种是实例方法this.a,另一种是原型方法Foo.prototype.a。因为实例方法此时为obj的内部属性方法,因此优先级更高,执行构造函数内this.a,输出2
  4. Foo.a(),此时Foo构造函数刚刚被初始实例化,内部Foo.a方法覆盖同名静态方法,因此输出1