Javascript 在ES6中,为什么可以';不使用此选项就引用同级方法吗?
我想,在大多数其他语言中,这为什么行不通呢Javascript 在ES6中,为什么可以';不使用此选项就引用同级方法吗?,javascript,ecmascript-6,Javascript,Ecmascript 6,我想,在大多数其他语言中,这为什么行不通呢 class Test { a() { console.log('hi'); } b() { a(); } } 在Java或Ruby中,这是可行的。从b给a打电话完全可以。。但是在Javascript类中。为什么我需要把这个.a,这个.b,这个 它背后的技术原因是什么,它的好处是什么,从现在起它会改变吗?有计划吗?基本上,JavaScript没有基于类的继承。它有基于原型的继承和一些语法糖来模
class Test {
a() {
console.log('hi');
}
b() {
a();
}
}
在Java或Ruby中,这是可行的。从b给a打电话完全可以。。但是在Javascript类中。为什么我需要把这个.a
,这个.b
,这个
它背后的技术原因是什么,它的好处是什么,从现在起它会改变吗?有计划吗?基本上,JavaScript没有基于类的继承。它有基于原型的继承和一些语法糖来模仿基于类的继承 更一般地说,如果试图确定
a()
是否表示this.a()
,或者它是否表示当前函数可以访问的范围内存在的另一个a()
,则会出现严重的性能问题。这甚至可能在每次调用b()
时发生变化
记住,在JavaScript中,仅仅因为一个对象现在有一个方法a()
,并不意味着它以后还会有这个方法a()
。可以从对象中删除方法,也可以向对象添加新方法
试图确定哪个函数是预期的调用目标,基本上会产生与导致
with
现在被弃用的性能问题完全相同的性能问题-有大量的优化无法实现,因为在您尝试这样做之前,您无法确定将调用哪个方法。,基本上,JavaScript没有基于类的继承。它有基于原型的继承和一些语法糖来模仿基于类的继承
更一般地说,如果试图确定a()
是否表示this.a()
,或者它是否表示当前函数可以访问的范围内存在的另一个a()
,则会出现严重的性能问题。这甚至可能在每次调用b()
时发生变化
记住,在JavaScript中,仅仅因为一个对象现在有一个方法a()
,并不意味着它以后还会有这个方法a()
。可以从对象中删除方法,也可以向对象添加新方法
试图确定哪个函数是预期的调用目标,基本上会产生与导致
with
现在被弃用的性能问题完全相同的性能问题-有大量的优化无法实现,因为在您尝试这样做之前,您无法确定将调用哪个方法。我会改变的。好处是维护JavaScript关于给定名称引用内容的简单规则。原因是福利+类是假的,原型是真的(如果Test
没有定义a
,但是继承自它的类定义了a()
仍然意味着this.a()
?)。至于“背后的技术原因”,最好问问Brendan Eich。但请记住,他在短短10天内编写了ECMAscript的基础知识,并实现了原型继承,而不是类,因此答案可能是“当时这似乎是个好主意”。-)@Ryan如果子类扩展了Test
,那么该类的实例将引用子类的a
,不管它是否在Test
中定义,它都会被子类
所覆盖。父类无论如何都不能访问子类的方法“父类无论如何都不能访问子类的方法”在JavaScript上下文中没有任何意义。看看Python的长期类实现,不会改变。好处是维护JavaScript关于给定名称引用内容的简单规则。原因是福利+类是假的,原型是真的(如果Test
没有定义a
,但是继承自它的类定义了a()
仍然意味着this.a()
?)。至于“背后的技术原因”,最好问问Brendan Eich。但请记住,他在短短10天内编写了ECMAscript的基础知识,并实现了原型继承,而不是类,因此答案可能是“当时这似乎是个好主意”。-)@Ryan如果子类扩展了Test
,那么该类的实例将引用子类的a
,不管它是否在Test
中定义,它都会被子类
所覆盖。父类无论如何都不能访问子类的方法“父类无论如何都不能访问子类的方法”在JavaScript上下文中没有任何意义。看看Python由来已久的类实现。Ruby有元编程,您可以在其中动态添加方法,但它工作得很好。@MuhammadUmer:MRI与现代JavaScript引擎相比速度慢得惊人。这与“工作”无关。这种语言可以有这个特性,而且可以工作,但是它的性能不好。即使在今天,您也可以使用(this){}将所有方法包装在中,从而获得所需的行为。。。“付出了巨大的性能代价”。@穆罕默德·默多默:这种行为——你从你的提案中得到的——也是……粗俗的@Ryan是一个很好的例子,但是,我不认为在任何模式下都会创建这样的随机kamikaze全局函数,但我看到了它的优点。但请注意,这样做会很奇怪。Ruby有元编程,您可以在其中动态添加方法,但它工作得很好。@MuhammadUmer:MRI与现代JavaScript引擎相比速度非常慢。这与“工作”无关。这种语言可以有这个特性,而且可以工作,但是它的性能不好。即使在今天,您也可以使用(this){}
将所有方法包装在中,从而获得所需的行为。。。“付出了巨大的性能代价”。@穆罕默德·默多默:这种行为——你从你的提案中得到的——也是……粗俗的@Ryan是一个很好的例子,但是,我不认为在任何模式下都会创建这样的随机kamikaze全局函数,但我看到了它的优点。然而注意到