为什么类中的javascript函数没有被提升?

时间:2017-09-28 16:29:43

标签: javascript ecmascript-6

class A {
  f1() {
    f2();
  }
  f2() {}
}

var a = new A();

console.log(a.f1());

未定义返回f2。

鉴于:

{
  function f1() {
    return f2();
  }
  function f2() {
    return 'f2';
  }

  console.log(f1());
}

打印'f2'

我只是想知道为什么类中的函数没有被提升?

1 个答案:

答案 0 :(得分:4)

class A {
  f1() {
    return f2()
  }
  f2() {
    return 'f2'
  }
}

var a = new A()

console.log(a.f1())

不等于

{
  function f1() {
    return f2()
  }
  function f2() {
    return 'f2'
  }

  console.log(f1())
}

相反,它是语法糖:

function A() {
}

A.prototype.f1 = function () {
  return f2()
}
A.prototype.f2 = function () {
  return 'f2'
}

var a = new A()

console.log(a.f1())

在这种形式中,应该更清楚为什么引用f2失败:范围内没有f2函数。由于函数是在原型上设置的,因此您需要使用this

访问它们

class A {
  f1() {
    return this.f2()
  }
  f2() {
    return 'f2'
  }
}

var a = new A()

console.log(a.f1())