在ES6中,为什么不使用它来参考兄弟方法呢?

时间:2017-06-30 05:17:06

标签: javascript ecmascript-6

为什么这不会起作用,在大多数其他语言中我认为它。

class Test {
    a() {
       console.log('hi');
    }
    b() {
      a(); 
    }
}

在Java或Ruby中,这可行。从b调用a将完全没问题但是在Javascript类中。为什么我需要放this.athis.b,这就是这个..?

背后的技术原因是什么,有什么好处,它现在会有变化 - 是否有计划?

1 个答案:

答案 0 :(得分:4)

嗯,从根本上说,JavaScript并没有基于类的继承。它具有基于原型的继承,带有一些语法糖,可以模仿基于类的继承。

更一般地说,尝试确定a()是否意味着this.a()或者它是否意味着当前函数可以访问的范围中存在的另一个a()存在严重的性能问题。而且每次调用b()时都会发生变化!

请记住,在JavaScript中,仅仅因为对象现在有一个方法a()并不意味着它以后仍然会有该方法a()。您可以删除对象的方法,也可以向对象添加新方法。

尝试确定哪个函数是预期的调用目标基本上会产生完全相同的性能问题,导致with现在被弃用 - 有大量的优化无法实现,因为你可以& #39; t确定在您尝试这样做的那一刻之前调用哪种方法。